র‌্যাম থেকে কোড চালাবেন কেন?


27

আমি আমার মাইক্রোকন্ট্রোলার সংকলকটির জন্য র‌্যাম থেকে কোনও ফাংশন কার্যকর করতে বাধ্য করতে (বা প্রস্তাব দিতে) কিছু ম্যাক্রো জুড়ে এসেছি।

https://siliconlabs.github.io/Gecko_SDK_Doc/efr32mg1/html/group__RAMFUNC.html#gac6abbc7f869eec9fb47e57427587c556

http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM

https://www.iar.com/support/tech-notes/linker/controlling-placement-of-the-section-where-__ramfunc-functions-reside-ewarm-5.x--6.x/

https://community.nxp.com/thread/389099

কোন ক্ষেত্রে এটি মূল্যবান? যদি কেবলমাত্র বেনিফিটটি কেবল গতি বাড়ানো হয় তবে আমি কেন সর্বদা র‌্যাম থেকে চালিত করব না? এটি কি সাধারণত উচ্চতর ড্রয়ের কারণ হয়?


13
র‌্যাম থেকে এক্সিকিউট করা কোড কম বর্তমান আঁকেন (আমি নিশ্চিত নই যে এটি সমস্ত সিপিইউ / এসসিসির ক্ষেত্রে সত্য কিনা)। আমি একবার একটি প্রকল্প তৈরি করেছি যেখানে আমরা বেশিরভাগ কোডটি র‍্যামে রেখেছি কারণ এটি ব্যাটারি ডিভাইস ছিল এবং আমরা এটি যতদিন সম্ভব বেঁচে থাকতে চেয়েছিলাম। আপনি যদি কেবল র‌্যাম থেকে কোডটি কার্যকর করতে পারেন তবে আপনি কিছু এসসিতে ফ্ল্যাশ ব্লকগুলিও পাওয়ার অফ করতে পারেন এবং আরও বেশি শক্তি সঞ্চয় করতে পারেন।
আল বুন্ডি

4
@ পাইপ - আমি উত্তর দেওয়ার পরিবর্তে এটিকে মন্তব্য করার কারণটি কল্পনা করেছি যে এটি আসল প্রশ্নের উত্তর দেয় না, এজন্য আপনি নিজের কোডটি কার্যকর করার জন্য সর্বদা র‍্যাম ব্যবহার করতে চান না ।
জুলাই

1
@ জুলস হ্যাঁ, আমি ধারণা করি এটি "সহায়ক উপাখ্যান" হিসাবে বোঝানো হয়েছে। স্ট্যাক এক্সচেঞ্জের জিনিসগুলি খুব ভাল কারণে প্রতিরোধের জন্য ডিজাইন করা হয়েছে।
পাইপ

1
কারণ আপনার রেজিস্টার থেকে কার্যকর করার জন্য পর্যাপ্ত রেজিস্টার নেই। (আমার কাছে সেই চিপ আছে))
জোশুয়া

সবকিছুর পাশাপাশি: গতিশীল র‌্যাম থেকে কোড এক্সিকিউট করা বিশেষত ডিআআরএএম রিফ্রেশটি চালিয়ে যাওয়ার জন্য একটি বিস্তৃত সফ্টওয়্যার হ্যাকের অংশ হতে পারে। :)
কাজ

উত্তর:


32

অন্যরা ইতিমধ্যে উল্লিখিত গতি এবং অন্যান্য বৈশিষ্ট্যগুলি ছাড়াও, র‌্যাম থেকে চালানো কোড বুটলোডারগুলিতে কার্যকর হতে পারে যেখানে আপনাকে আপনার মাইক্রো এর ফ্ল্যাশ পুনরায় প্রোগ্রাম করতে হবে - আপনি ফ্ল্যাশ থেকে কোডটি কার্যকর করতে পারবেন না যা আপনি মুছে ফেলার মধ্যবর্তী অবস্থানে রয়েছেন এবং reprogramming।


4
আপনার কতগুলি ফ্ল্যাশ ব্লক রয়েছে এবং কোনটি আপনার বুটলোডারকে সংশোধন করার অনুমতি দেয়, পরবর্তী ব্লকের ডেটা মঞ্চ করতে আপনি কতটা র‌্যাম রেখে গেছেন তার উপর নির্ভর করে ইত্যাদি। তবে ফ্ল্যাশটি র‌্যামকে সংশোধন করতে পারলে সত্য তার জন্য ভাল ...
old_timer

1
এটি কেবলমাত্র অর্ধেক প্রশ্নের উত্তর (শিরোনামের অংশ) বলে মনে হচ্ছে। ওপি আরও জিজ্ঞাসা করেছিল, "যদি কেবলমাত্র বেনিফিটের গতি বাড়ানো হয় তবে আমি কেন সর্বদা র‌্যাম থেকে কার্যকর করব না?", এবং এই উত্তরটি কেন র‌্যাম থেকে কার্যকর করতে চায় না তা ব্যাখ্যা করে না ।
ডক্টর জে

2
এতদূর ভাল, তবে পুনর্লিখনের ফ্ল্যাশের মাঝে আপনি যদি শক্তি (এবং এইভাবে র‌্যাম) হারিয়ে ফেলেন তবে কি হবে? এটি সমাধান করা যেতে পারে তবে বুটলোডারের জন্য অন্য ডিজাইনের মতোই এটি অবশ্যই বিবেচনা করা উচিত।
অ্যারোনডি

19

আমি সেই মাইক্রোটির জন্য ডেটাশিটের দিকে নজর দিইনি। যাইহোক, এই পরিস্থিতিতে প্রায়শই এমন হয় যে প্রোগ্রামটি মেমরিটি প্রয়োগ করা হয় এমন ফ্ল্যাশ থেকে আনার চেয়ে র‌্যাম থেকে আনতে দ্রুত হয়।

ফ্ল্যাশের সুবিধাটি হ'ল বড় পরিমাণে তুলনামূলক কম সস্তা হতে পারে। মাইক্রোকন্ট্রোলার নির্মাতারা কখনও কখনও একটি চিপে প্রচুর ফ্ল্যাশ রাখে, তারপরে কোডটি কার্যকর করতে পারে এমন আরও সীমিত র্যাম স্পেস সরবরাহ করে। এটি সময়-সমালোচনামূলক রুটিনগুলিকে র‍্যামে অনুলিপি করার অনুমতি দেয়, তারপরে সেগুলি সেখান থেকে চালিত করে।

আপনি যে সংকলকটির স্যুইচটি উল্লেখ করেছেন সম্ভবত এটি লিঙ্কার এবং ফ্ল্যাগগুলির সাথে কাজ করে যা ফ্ল্যাশের যে অংশটি র‍্যামে অনুলিপি করতে হবে সেই সংকলক রান-টাইম কোড যা রিসেট থেকে চলে। বিভিন্ন বাস্তবায়নের বিবরণে পৃথক হবে।


17

যখন আপনি র‌্যামে এক্সিকিউট করতে চান কারণ এটি দ্রুত, এটি সাধারণত কারণ র‌্যাম অন-চিপ এসআরএএম is এটি একটি দুর্লভ সংস্থান, যা আপনি সম্ভবত এমন ডেটার জন্য চাইবেন যা পড়তে / লেখার অ্যাক্সেসের প্রয়োজন হয়।

কোড জন্য এটি ব্যবহার যদি আপনার আগে থেকেই যখন আছে রম কোড / যে আপনি ফ্ল্যাশ এক্স পরিমাণ এবং RAM এর একটি অতিরিক্ত এক্স পরিমাণ প্রয়োজন ফ্ল্যাশ উপায়।

এটি বুট করার সময় বা আপনি এটি চালাতে চাইলে অতিরিক্ত কপি করার পর্যায়েও প্রয়োজন, যদিও এটি বেশিরভাগ ক্ষেত্রে তুচ্ছ।

Ditionতিহ্যগতভাবে এটি কোনও নির্দেশিকা ক্যাশে সমাধান করা হয় তবে একটি মাইক্রোকন্ট্রোলারের মধ্যে এটি অভ্যন্তরীণ এসআরএএম জেনেরিক রাখতে আরও বেশি অর্থবোধ করতে পারে, কারণ আপনি একটি দ্রুত প্রয়োগের গতি চান বলে আপনি একটি মাইক্রোকন্ট্রোলার ব্যবহার করেন না।

একটি নির্ভরযোগ্যতা সমস্যাও রয়েছে - আসল রমে কোড এক্সিকিউট করা বগি কোড দ্বারা সংশোধন করা শক্ত।


14

সমস্ত ভাল উত্তর ছাড়াও:

যদি কেবলমাত্র বেনিফিটটি কেবল গতি বাড়ানো হয় তবে আমি কেন সর্বদা র‌্যাম থেকে চালিত করব না?

কারণ একটি এম্বেড থাকা সিস্টেমে সাধারণত আপনার প্রয়োজনীয় পরিমাণ র‌্যাম থাকে না। উদাহরণস্বরূপ একটি এসটিএম 32 যার 32kB বা র‌্যাম এবং EEPROM এর 512kB রয়েছে। র‌্যামে পুরো প্রোগ্রামটি কার্যকর করতে আপনার EEPROM এর চেয়ে বড় আকারের র‌্যামের প্রয়োজন হবে।


5
"যেহেতু এম্বেড থাকা সিস্টেমে সাধারণত আপনার প্রয়োজনীয় পরিমাণ র্যাম থাকে না and" - এবং আপনার যদি এটি করার মতো পর্যাপ্ত র্যাম থাকে তবে আপনি কম র‌্যামের সাথে একটি সস্তার এমসিইউতে স্যুইচ করে প্রায় অবশ্যই ব্যয় হ্রাস করতে পারবেন। কারণ আপনি যদি প্রশ্নটি জিজ্ঞাসা করছেন তবে সর্বদা কম র্যাম সহ একটি সস্তা এমসিইউ রয়েছে (সবচেয়ে ছোট এবং সস্তার এমসিইউ হার্ভার্ড আর্কিটেকচার ব্যবহার করে যাতে র‌্যাম থেকে চালানো যায় না)
জুলাই

13

অন্যান্য উত্তরগুলি বিদ্যুত ব্যবহার সম্পর্কে তেমন আলোচনা করেছে বলে মনে হয় না, যা আপনি বিশেষভাবে জিজ্ঞাসা করেছিলেন।

উত্তরটি হ'ল এটি কিছুটা মাইক্রোকন্ট্রোলারের উপর নির্ভর করে তবে প্রায়শই র‌্যাম থেকে চালানো শক্তি ব্যবহার হ্রাস করতে পারে কারণ এটি ফ্ল্যাশ মেমরির চেয়ে র‌্যামের নির্দেশাবলী পড়ার জন্য কম শক্তি প্রয়োজন।

একটি সাধারণ ব্যবহার হ'ল ফ্ল্যাশ মেমরিটি চালিত করে র‍্যাম থেকে কম শক্তি "ঘুম" ফাংশন চালানো হবে। কেবলমাত্র বিদ্যুতের খরচ হ্রাস নয়, তবে মাইক্রোকন্ট্রোলারকে যদি দ্রুত ঘুম থেকে ওঠার প্রয়োজন হয় (যেমন একটি বাহ্যিক বাধার প্রতিক্রিয়া হিসাবে) আবার ফ্ল্যাশ মেমরি চালিত হওয়ার সময় আর দেরি হয় না।

কিছু অংশ যেমন এটমেল এসএএম পরিসরের কিছু অংশে বিশেষ অতিরিক্ত লো পাওয়ার র‌্যাম রয়েছে যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে। এটি বিশেষ র‍্যামে অল্প পরিমাণে কোড লোড করতে দেয়, যখন উপলব্ধ র্যামের প্রচুর পরিমাণ এবং অন্যান্য সমস্ত স্মৃতি নিচে চালিত হয় এবং মাইক্রোকন্ট্রোলার গভীর ঘুমের মোডে প্রবেশ করে।


7

অন্যদের দ্বারা উল্লিখিত সম্ভাব্য গতির সুবিধাগুলি ব্যতীত, র্যাম কোডটিও গতিশীল এবং ফ্ল্যাশে কিছু টেলরিং কোড দ্বারা প্রয়োজনীয় হিসাবে সংশোধন করা যেতে পারে।

এটি কয়েকটি পরামিতি পরিবর্তন করার মতো সহজ হতে পারে বা দূরবর্তীভাবে আপলোড করা পুরো হ্যান্ডলার রুটিন হতে পারে।


অথবা র‌্যামের কোডটি ডিস্ক (যেমন এসডি) বা নেটওয়ার্ক থেকে লোড করা যেতে পারে
b

4

ফ্ল্যাশ মেমরি থেকে কার্যকর করার চেয়ে র‍্যাম থেকে এক্সিকিউটিং কোডটি উল্লেখযোগ্যভাবে দ্রুত। বেশিরভাগ সিপিইউ দ্রুততম সম্ভাব্য র‌্যাম অ্যাক্সেসের জন্য ভারীভাবে অনুকূলিত হয়, এবং এমনকি দ্রুততম ফ্ল্যাশ মেমরি কেবল র‌্যামের গতির একটি ভগ্নাংশেও পৌঁছায়।

তবে মনে রাখবেন যে কোডটি ফ্ল্যাশ থেকে র্যামে স্থানান্তর করতেও সময় লাগে। যদি কোডটি একবারেই কার্যকর করা হয় তবে আপনাকে কেবল এটি একবারে পড়তে হবে এবং সুতরাং এটি সরাসরি চালানোর পরিবর্তে প্রথমে এটি র‍্যামে অনুলিপি করার জন্য আপনার সময় নষ্ট হবে। যদি কোডটি মাঝেমধ্যে কার্যকর করা হয় (সুতরাং এটি র্যামে অনুলিপি করা হলে এটি দ্বিতীয়বার বলা হওয়ার সাথে সাথে এক্সিকিউশন বাড়িয়ে তুলবে), তবে সিস্টেমটি সাধারণত নিষ্ক্রিয় থাকে, তবে আপনি সেই কোডটি র‍্যামে অনুলিপি করে দ্রুত চালিত করবেন, তবে কারওই যত্ন নেই, কারণ সিস্টেমটি ব্যয় করার যথেষ্ট সময় আছে

সুতরাং কোডটি ঘন ঘন সম্পাদন করা হয় এবং আপনি এটিকে সিস্টেমের শ্বাসরুদ্ধকর বিন্দু হিসাবে পরিমাপ করেছেন তবে এই জাতীয় অপ্টিমাইজেশানগুলি কেবলমাত্র চেষ্টাটির জন্য মূল্যবান।

অন্যদিকে র‌্যামের সক্রিয়ভাবে ডেটা সংরক্ষণ করা দরকার, যখন ফ্ল্যাশ মেমরিটি হয় না, সুতরাং মোট বিদ্যুতের খরচ বৃদ্ধি পায়, যদি র‌্যামকে সচল রাখতে হয়। এটি তবে কেবলমাত্র প্রাসঙ্গিক, যদি র‌্যাম অন্যথায় ব্যবহার না করা হয় তবে বেশিরভাগ আধুনিক সিস্টেমগুলি - একরকম বা অন্য কোনও উপায়ে - ইতিমধ্যে উপলব্ধ র‌্যাম ব্যবহার করবে এবং ইতিমধ্যে এটি সক্রিয় রাখবে।


4

র‌্যাম থেকে কোড সম্পাদন করার দুটি খুব সাধারণ কারণ রয়েছে:

  1. কিছু মাইক্রোপ্রসেসর ফ্ল্যাশ প্রোগ্রামিংয়ের সময় ফ্ল্যাশ থেকে সম্পাদন করতে পারে না - যদিও অনেকে ফ্ল্যাশটি লেখা থেকে আলাদা ব্লকে থাকে ততক্ষণ এটি এটি করতে পারে। ফ্ল্যাশ রাইটস অ্যাপ্লিকেশনটিকে পুনরায় প্রোগ্রাম করতে পারে (বুট-লোডার কেস), বা যখন ফ্ল্যাশটি অ-উদ্বায়ী প্রোগ্রামের তথ্য (কনফিগারেশন, ক্যালিব্রেশন ইত্যাদি) সঞ্চয় করতে ব্যবহৃত হয় when

  2. অনেক মাইক্রোপ্রসেসরে, ফ্ল্যাশের চেয়ে র‌্যাম অনেক দ্রুত faster এই ডিভাইসগুলির জন্য, র‍্যাম থেকে ছোট গতির-সমালোচনামূলক রুটিনগুলি কার্যকর করা যেতে পারে, যদিও সাধারণত র‌্যাম ফ্ল্যাশের চেয়ে কম সরবরাহে থাকে।


2

র‌্যামের জন্য আর একটি ইউজকেস কেবল এলোমেলো বিটফ্লিপগুলির বিরুদ্ধে কার্যকরকরণ সুরক্ষা। আমরা এই মডেলটি আমাদের ছোট কিউস্যাটে ব্যবহার করি কারণ মূল কম্পিউটার বোর্ডে একটি ইসিসি র‌্যাম রয়েছে যা বিকিরণের কারণে বিটফ্লিপ সহ্য করে। কোনও ইসিসি viর্ষায় সম্পূর্ণ শুরুতে একটি র‌্যামডিস্ক পুরোপুরি র‌্যামে লোড হয়।

ফ্ল্যাশটি ইসিসি সুরক্ষিত নয় (শেল্ফ মাইক্রো এসডি কার্ডের স্ট্যান্ডার্ড অফ) তবে আমাদের দুর্নীতির জন্য পরীক্ষা করার অন্যান্য পদ্ধতি রয়েছে (একাধিক চিত্র, চেকসাম ইত্যাদি))


আমি ধরে নিয়েছি যে EEPROM বা ফ্ল্যাশের মতো কিছু বিকিরণের দ্বারা বিটফ্লিপ করা "শক্ত" হতে পারে, অর্থাত্ আরও শক্তির প্রয়োজন।
পাইপ

প্রকৃতপক্ষে এটি তাই, তবে যেহেতু আমরা কেবলমাত্র কোনও বিশেষ ইসিসি বৈশিষ্ট্যযুক্ত স্ট্যান্ডার্ড ফ্ল্যাশ ব্যবহার করি না, এই উদ্দেশ্যে র্যাম ব্যবহার করা আরও ভাল।
তেজস কালে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.