.text
টেক্সট সেগমেন্টে আসল কোড থাকে এবং মাইক্রোকন্ট্রোলারদের জন্য ফ্ল্যাশ মেমোরিতে প্রোগ্রাম করা হয়। একাধিক পাঠ্য বিভাগ থাকতে পারে যখন ফ্ল্যাশ মেমরির একাধিক, অ-অবরুদ্ধ ব্লক থাকে; উদাহরণস্বরূপ একটি স্টার্ট ভেক্টর এবং মেমরির শীর্ষে অবস্থিত ভ্যাক্টরগুলি এবং 0 থেকে শুরু কোড; বা বুটস্ট্র্যাপ এবং মূল প্রোগ্রামের জন্য পৃথক বিভাগ।
.bss এবং .data
তিন ধরণের ডেটা রয়েছে যা কোনও ফাংশন বা পদ্ধতির জন্য বাহ্যিক বরাদ্দ করা যেতে পারে; প্রথমটি অবিবেচনাযুক্ত ডেটা (historতিহাসিকভাবে .bss নামে পরিচিত, যার মধ্যে 0 প্রাথমিক তথ্য অন্তর্ভুক্ত) এবং দ্বিতীয়টি আরম্ভ হয় (নন-বিএসএস), বা .ডাটা। "বিএসএস" নামটি historতিহাসিকভাবে "প্রতীক ব্লক স্টার্টড সিম্বল" থেকে এসেছে, যা প্রায় 60 বছর আগে একটি এসেম্বলারের মধ্যে ব্যবহৃত হয়েছিল। এই উভয় অঞ্চলই র্যামে অবস্থিত।
একটি প্রোগ্রাম সংকলিত হিসাবে, ভেরিয়েবলগুলি এই দুটি সাধারণ অঞ্চলের একটিতে বরাদ্দ করা হবে। লিঙ্কিংয়ের পর্যায়ে, সমস্ত ডেটা আইটেম একসাথে সংগ্রহ করা হবে। যে সমস্ত ভেরিয়েবলগুলি সূচনা করতে হবে সেগুলির প্রাথমিক মানগুলি ধরে রাখার জন্য প্রোগ্রাম মেমোরির একটি অংশ থাকবে এবং প্রধান () বলার আগে ভেরিয়েবলগুলি আরম্ভ করা হবে, সাধারণত crt0 নামক একটি মডিউল দ্বারা। বিএসএস বিভাগটি একই শুরুর কোড দ্বারা সমস্ত জিরোতে শুরু করা হয়।
কয়েকটি মাইক্রোকন্ট্রোলারের সাথে, এমন ছোট্ট নির্দেশাবলী রয়েছে যা র্যামের প্রথম পৃষ্ঠায় (প্রথম 256 অবস্থানগুলি, যা কখনও কখনও পৃষ্ঠা 0 নামে পরিচিত) অ্যাক্সেসের অনুমতি দেয়। এই প্রসেসরের জন্য সংকলকটি সেখানে স্থাপনের জন্য near
ভেরিয়েবল নির্ধারণ করার মতো একটি কীওয়ার্ড সংরক্ষণ করতে পারে। একইভাবে, মাইক্রোকন্ট্রোলারগুলিও রয়েছে যা কেবলমাত্র পয়েন্টার রেজিস্ট্রারের মাধ্যমে নির্দিষ্ট ক্ষেত্রগুলি উল্লেখ করতে পারে (অতিরিক্ত নির্দেশাবলীর প্রয়োজন হয়), এবং এই জাতীয় ভেরিয়েবলগুলি মনোনীত করা হয় far
। অবশেষে কিছু প্রসেসর কিছুটা মেমরির অংশকে সম্বোধন করতে পারে এবং সংকলকটির (যেমন কীওয়ার্ড হিসাবে bit
) নির্দিষ্ট করার উপায় থাকবে ।
সুতরাং .nearbss এবং .neardata ইত্যাদির মতো অতিরিক্ত বিভাগ থাকতে পারে যেখানে এই পরিবর্তনগুলি সংগ্রহ করা হয়।
.rodata
কোনও ফাংশন বা পদ্ধতির বাহ্যিক তৃতীয় প্রকারের ডেটা প্রারম্ভিক চলকগুলির মতো, এটি কেবল পঠনযোগ্য নয় এবং প্রোগ্রামের মাধ্যমে পরিবর্তন করা যায় না। সি ভাষায় এই ভেরিয়েবলগুলি const
কীওয়ার্ড ব্যবহার করে বোঝানো হয়। এগুলি সাধারণত প্রোগ্রাম ফ্ল্যাশ মেমরির অংশ হিসাবে সঞ্চিত থাকে। কখনও কখনও এগুলিকে একটি .rodata (কেবলমাত্র পঠনযোগ্য ডেটা) বিভাগের অংশ হিসাবে চিহ্নিত করা হয়। হার্ভার্ড আর্কিটেকচার ব্যবহার করে মাইক্রোকন্ট্রোলারগুলিতে , সংকলককে এই ভেরিয়েবলগুলি অ্যাক্সেস করার জন্য বিশেষ নির্দেশাবলী ব্যবহার করতে হবে।
স্ট্যাক এবং গাদা
স্ট্যাক এবং হিপ দুটিই র্যামে স্থাপন করা হয়েছে। প্রসেসরের আর্কিটেকচারের উপর নির্ভর করে স্ট্যাকটি বড় হতে পারে বা নীচে নেমে যেতে পারে। যদি এটি বড় হয় তবে এটি র্যামের নীচে স্থাপন করা হবে। যদি এটি বাড়তে থাকে তবে এটি র্যামের শেষে স্থাপন করা হবে। হিপগুলি ভেরিয়েবলগুলিতে বরাদ্দ না হওয়া বাকী র্যাম ব্যবহার করবে এবং স্ট্যাকের বিপরীত দিকে বাড়বে। স্ট্যাক এবং হিপের সর্বোচ্চ আকার সাধারণত লিঙ্কার পরামিতি হিসাবে নির্দিষ্ট করা যায় specified
স্ট্যাকের উপর রাখা ভেরিয়েবলগুলি কোনও কীডওয়ার্ড ছাড়াই কোনও ফাংশন বা পদ্ধতির মধ্যে সংজ্ঞায়িত কোনও ভেরিয়েবল static
। এগুলিকে একসময় স্বয়ংক্রিয় ভেরিয়েবল ( auto
কীওয়ার্ড) বলা হত , তবে সেই কীওয়ার্ডটির প্রয়োজন হয় না। Orতিহাসিকভাবে, auto
বিদ্যমান কারণ এটি সি ভাষার পূর্ববর্তী বি ভাষার অংশ ছিল এবং এটির প্রয়োজন ছিল। ফাংশন প্যারামিটারগুলি স্ট্যাকের উপরেও স্থাপন করা হয়।
র্যামের জন্য এখানে একটি সাধারণ লেআউট (কোনও বিশেষ পৃষ্ঠা 0 বিভাগ ধরে নিলে):
ইপ্রোম, রম এবং এনভিআরাম
ফ্ল্যাশ মেমরিটি আসার আগে, EEPROM (বৈদ্যুতিন ক্ষয়যোগ্য প্রোগ্রামে কেবল পঠনযোগ্য মেমরি) প্রোগ্রাম এবং কনস্টের ডেটা (। টেক্সট এবং .ডোটাটা অংশগুলি) সঞ্চয় করতে ব্যবহৃত হত। এখন কেবলমাত্র EEPROM এর সামান্য পরিমাণ (যেমন 2KB থেকে 8KB বাইট) পাওয়া যায়, যদি থাকে তবে তা সাধারণত কনফিগারেশন ডেটা বা অন্যান্য ক্ষুদ্র পরিমাণে ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয় যা পাওয়ার-ডাউন পাওয়ার আপ ধরে রাখতে হয় চক্র। এগুলি প্রোগ্রামে ভেরিয়েবল হিসাবে ঘোষিত নয়, পরিবর্তে মাইক্রোকন্ট্রোলারে বিশেষ রেজিস্টার ব্যবহার করার জন্য লিখিত হয়। EEPROM পৃথক চিপে প্রয়োগ করা যেতে পারে এবং একটি এসপিআই বা আই²সি বাসের মাধ্যমে অ্যাক্সেস করা যেতে পারে।
রম মূলত ফ্ল্যাশের মতোই, কারখানায় প্রোগ্রাম করা ছাড়া (ব্যবহারকারীর দ্বারা প্রোগ্রামযোগ্য নয়)। এটি শুধুমাত্র খুব উচ্চ ভলিউম ডিভাইসের জন্য ব্যবহৃত হয়।
এনভিআরাম (অ-উদ্বায়ী র্যাম) EEPROM এর বিকল্প, এবং সাধারণত বাহ্যিক আইসি হিসাবে প্রয়োগ করা হয়। যদি নিয়মিত র্যামটি ব্যাটারি ব্যাক আপ হয় তবে এটি অ-উদ্বায়ী হিসাবে বিবেচিত হতে পারে; সেক্ষেত্রে কোনও বিশেষ অ্যাক্সেস পদ্ধতির প্রয়োজন নেই।
যদিও ডেটা ফ্ল্যাশে সংরক্ষণ করা যায় তবে ফ্ল্যাশ মেমরির সীমিত সংখ্যক মুছা / প্রোগ্রাম চক্র থাকে (1000 থেকে 10,000) তাই এটি এর জন্য সত্যই ডিজাইন করা হয়নি। এটি একবারে মেমরির ব্লকগুলি মুছে ফেলারও প্রয়োজন, তাই মাত্র কয়েকটি বাইট আপডেট করা অসুবিধাজনক। এটি কোড এবং কেবল পঠনযোগ্য ভেরিয়েবলগুলির জন্য তৈরি।
EEPROM এর মুছা / প্রোগ্রাম চক্রের উপর অনেক বেশি সীমাবদ্ধতা রয়েছে (100,000 থেকে 1,000,000) তাই এই উদ্দেশ্যে এটি আরও ভাল। যদি মাইক্রোকন্ট্রোলারে EEPROM উপলভ্য থাকে এবং এটি যথেষ্ট পরিমাণে বড় হয় তবে এটি যেখানে আপনি অস্থির ডেটা সংরক্ষণ করতে চান want তবে লেখার আগে আপনাকে প্রথমে ব্লকগুলিতে মুছে ফেলতে হবে (সাধারণত 4KB)।
যদি কোনও EEPROM না থাকে বা এটি খুব ছোট হয় তবে একটি বাহ্যিক চিপ প্রয়োজন। একটি 32 কেবি ইপ্রোম মাত্র 66 is এবং এটি মুছতে / 1,000,000 বারে লেখা যায়। একই সংখ্যার মুছা / প্রোগ্রামের ক্রিয়াকলাপের সাথে একটি এনভিআরএএম অনেক বেশি ব্যয়বহুল (x10) এনভিআরএম সাধারণত EEPROM এর চেয়ে পড়ার জন্য দ্রুত, তবে লেখার জন্য ধীর হয়। এগুলি একবারে বা বাইটগুলিতে লেখা যেতে পারে।
এই উভয়েরই আরও ভাল বিকল্প হ'ল এফআরএম (ফেরোইলেক্ট্রিক র্যাম), যা মূলত অসীম লেখার চক্র (100 ট্রিলিয়ন) এবং কোনও লেখার বিলম্ব নেই। এটি এনভিআরাম হিসাবে প্রায় একই দাম, 32KB এর জন্য প্রায় 5 ডলার।