কোন মাইক্রোকন্ট্রোলারের বিভিন্ন মেমরির মধ্যে কী থাকে?


25

বিভিন্ন মেমরি বিভাগ রয়েছে যেখানে সংকলনের পরে সি কোড থেকে বিভিন্ন ধরণের ডেটা রাখা হয়। অর্থাৎ, .text, .data, .bss, স্ট্যাকের এবং গাদা। আমি কেবল জানতে চাই যে এই প্রতিটি বিভাগটি মাইক্রোকন্ট্রোলার মেমরিতে কোথায় থাকবে। মেমরির ধরণগুলি র‌্যাম, এনভিআরএএম, রম, ইপ্রোম, ফ্ল্যাশ ইত্যাদি সরবরাহ করে কোন তথ্যটি কোন ধরণের মেমরিতে চলে into

আমি এখানে অনুরূপ প্রশ্নের উত্তর পেয়েছি, তবে তারা বিভিন্ন মেমরির প্রকারের কী কী বিষয়বস্তু হবে তা ব্যাখ্যা করতে ব্যর্থ হয়েছিল।

যে কোনও ধরনের সহায়তা খুব প্রশংসা করা হয়। আগাম ধন্যবাদ!


1
এনভিআরাম, রম, ইপ্রোম এবং ফ্ল্যাশ একই জিনিসটির জন্য বেশ আলাদা আলাদা নাম: অ-উদ্বায়ী মেমরি।
লন্ডিন

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

@SeanHoulihane দ্য ওপি মাইক্রোকন্ট্রোলারের, যা প্রায় সম্পর্কে জিজ্ঞাসা করা হয় সবসময় ফ্ল্যাশ আউট চালানো (আপনি ব্যতিক্রমী সঙ্গে আপনার মন্তব্য যোগ্যতা অর্জন হয়নি)। উদাহরণস্বরূপ, এমবি এর বহিরাগত র‌্যামের চলমান লিনাক্স সহ মাইক্রো প্রসেসরগুলি তাদের কার্য সম্পাদন করার জন্য তাদের প্রোগ্রামগুলি র‍্যামে অনুলিপি করে রাখে, সম্ভবত কোনও এসডি কার্ড মাউন্টযোগ্য ভলিউম হিসাবে কাজ করে।
tcrosley

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

1
কোনও জিনিসকে অন্যটির সাথে সংযুক্ত করার কোনও নিয়ম নেই, নিশ্চিত যে পাঠ্য এবং রডাটা কেবল পঠিত স্টাফই আদর্শভাবে ফ্ল্যাশ যেতে চাইবে, তবে .ডাটা এবং অফসেট এবং বিএসএসের আকারও সেখানে যায় (এবং তারপরে অনুলিপিটি পান বুটস্ট্র্যাপ কোড)। এই পদগুলির (.text, ইত্যাদি) মাইক্রোকন্ট্রোলারগুলির সাথে কোনও সম্পর্ক নেই এটি একটি সংকলক / টুলচেন জিনিস যা সংকলক / সরঞ্জামচেইনের সমস্ত লক্ষ্যগুলিতে প্রযোজ্য। দিনের শেষে প্রোগ্রামার সিদ্ধান্ত নেয় যে জিনিসগুলি কোথায় যায় এবং সাধারণত লিঙ্কার স্ক্রিপ্টের মাধ্যমে সরঞ্জামচেনকে অবহিত করে।
old_timer

উত্তর:


38

.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 ডলার।


এটি ছিল তথ্যগুলির সত্যিকারের দরকারী অংশ। আপনি দয়া করে আপনার ব্যাখ্যা একটি রেফারেন্স প্রদান করতে পারেন? পাঠ্য বই বা জার্নালের মতো, যদি আমি এই বিষয়ে আরও পড়তে চাই ..?
সোজু টি ভার্ফিজে

আরও একটি প্রশ্ন, আপনি দয়া করে অন্যটির তুলনায় একটি স্মৃতির সুবিধাগুলি বা অসুবিধাগুলি সম্পর্কে ধারণা দিতে পারেন (EEPROM, NVRAM এবং ফ্ল্যাশ)?
সোজু টি ভার্গিজ

চমৎকার উত্তর. আমি একটি পরিপূরক পোস্ট করেছি যাতে সি ভাষায় বিশেষত কোথায় যায় সে সম্পর্কে বিস্তারিতভাবে আলোকপাত করে ing
লুন্ডিন

1
@ সজুটিভিয়ারগিজ আমি আমার উত্তর আপডেট করেছি এবং এফআরএম সম্পর্কে কিছু তথ্য অন্তর্ভুক্ত করেছি।
tcrosley

@ লন্ডিন আমরা একই বিভাগের নাম ব্যবহার করেছি (যেমন .ড্রোটা) যাতে উত্তর একে অপরের সুন্দরভাবে পরিপূরক হয়।
tcrosley

21

সাধারণ এম্বেড থাকা সিস্টেম:

Segment     Memory   Contents

.data       RAM      Explicitly initialized variables with static storage duration
.bss        RAM      Zero-initialized variables with static storage duration
.stack      RAM      Local variables and function call parameters
.heap       RAM      Dynamically allocated variables (usually not used in embedded systems)
.rodata     ROM      const variables with static storage duration. String literals.
.text       ROM      The program. Integer constants. Initializer lists.

এছাড়াও, সাধারণত স্টার্ট-আপ কোড এবং বাধা ভেক্টরগুলির জন্য পৃথক ফ্ল্যাশ বিভাগ থাকে flash


ব্যাখ্যা:

কোনও ভেরিয়েবলের স্থিতিশীল স্টোরেজ সময়কাল থাকে যদি এটি হিসাবে ঘোষিত হয় staticবা এটি ফাইল স্কোপে থাকে (কখনও কখনও opড়ুভাবে "গ্লোবাল" নামে পরিচিত)। সি এর একটি বিধি রয়েছে যে সমস্ত স্ট্যাটিক স্টোরেজ সময়কাল ভেরিয়েবলগুলি যা প্রোগ্রামার স্পষ্টভাবে সূচনা করে না তা শূন্যে শুরু করতে হবে।

প্রতিটি স্ট্যাটিক স্টোরেজ সময়কাল পরিবর্তনশীল যে শুন্যতে সক্রিয়া করা হয়, পরোক্ষভাবে বা স্পষ্টভাবে, শেষ পর্যন্ত .bss। যেগুলি যেগুলি স্পষ্টভাবে একটি শূন্য-অমূল্যের সাথে আরম্ভ করা হয় শেষ হয় .data

উদাহরণ:

static int a;                // .bss
static int b = 0;            // .bss      
int c;                       // .bss
static int d = 1;            // .data
int e = 1;                   // .data

void func (void)
{
  static int x;              // .bss
  static int y = 0;          // .bss
  static int z = 1;          // .data
  static int* ptr = NULL;    // .bss
}

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

অন্যান্য বিভাগগুলির উদাহরণ:

const int a = 0;           // .rodata
const int b;               // .rodata (nonsense code but C allows it, unlike C++)
static const int c = 0;    // .rodata
static const int d = 1;    // .rodata

void func (int param)      // .stack
{
  int e;                   // .stack
  int f=0;                 // .stack
  int g=1;                 // .stack
  const int h=param;       // .stack
  static const int i=1;    // .rodata, static storage duration

  char* ptr;               // ptr goes to .stack
  ptr = malloc(1);         // pointed-at memory goes to .heap
}

ভেরিয়েবলগুলি যা স্ট্যাকের সাথে যেতে পারে প্রায়শই অপ্টিমাইজেশনের সময় সিপিইউ রেজিস্টারে শেষ হতে পারে। থাম্বের নিয়ম হিসাবে, কোনও ভেরিয়েবল যার ঠিকানা নেওয়া নেই সেগুলি সিপিইউ রেজিস্টারে রাখা যেতে পারে।

মনে রাখবেন যে পয়েন্টারগুলি অন্যান্য ভেরিয়েবলের তুলনায় কিছুটা জটিল const। পার্থক্যটি জানা খুব গুরুত্বপূর্ণ, যাতে আপনার পয়েন্টারগুলি দুর্ঘটনাক্রমে র‍্যামে শেষ না হয়, যখন আপনি চেয়েছিলেন সেগুলি ফ্ল্যাশ হতে পারে।

int* j=0;                  // .bss
const int* k=0;            // .bss, non-const pointer to const data
int* const l=0;            // .rodata, const pointer to non-const data
const int* const m=0;      // .rodata, const pointer to const data

void (*fptr1)(void);       // .bss
void (*const fptr2)(void); // .rodata
void (const* fptr3)(void); // invalid, doesn't make sense since functions can't be modified

পূর্ণসংখ্যার ধ্রুবক, ইনিশিয়ালার তালিকা, স্ট্রিং লিটারাল ইত্যাদির ক্ষেত্রে এগুলি সংকলকটির উপর নির্ভর করে টেক্সট বা .ডোটাতে শেষ হতে পারে। সম্ভবত, তারা এ হিসাবে শেষ:

#define n 0                // .text
int o = 5;                 // 5 goes to .text (part of the instruction)
int p[] = {1,2,3};         // {1,2,3} goes to .text
char q[] = "hello";        // "hello" goes to .rodata

আপনার প্রথম উদাহরণ কোডে আমি বুঝতে পারি না, কেন 'স্ট্যাটিক ইনট বি = 0;' .bss এ যায় এবং কেন 'স্ট্যাটিক ইন্ট ডি = 1;' dুকে যায় ..ডাটা ..? আমার বুঝে, উভয়ই স্ট্যাটিক ভেরিয়েবল যা প্রোগ্রামার দ্বারা সূচনা করা হয়েছিল .. তারপরে কী পার্থক্য আসে? @ লন্ডিন
সুজু টি

2
@ সজুটিভির্গহিজ কারণ .bss ডেটা ব্লক হিসাবে 0 থেকে শুরু করা হয়েছে; d = 1 এর মতো নির্দিষ্ট মানগুলিকে ফ্ল্যাশ রাখতে হবে।
tcrosley

@ সজুটিভিয়ারগিজ কিছু স্পষ্টতা যোগ করেছেন।
লন্ডিন

@ লন্ডিন এছাড়াও, আপনার শেষ উদাহরণ কোড থেকে, এর অর্থ কি এই যে সমস্ত সূচনাগত মান একা। টেক্সট বা .ডোটাটা এবং তাদের সম্পর্কিত ভেরিয়েবলগুলি .bss বা .data এ চলে যায়? যদি তা হয় তবে কিভাবে ভেরিয়েবলগুলি এবং তার সাথে সম্পর্কিত মানগুলি একে অপরের সাথে ম্যাপ করা হয় (যেমন, .bss / .data এবং .text / .rodata বিভাগের মধ্যে)?
সোজু টি ভার্গিজ

@ সজুটিভির্গ না, এর .dataসাধারণত ফ্ল্যাশটিতে একটি তথাকথিত লোড ঠিকানা থাকে, যেখানে প্রাথমিক মানগুলি সংরক্ষণ করা হয়, এবং র‌্যামের একটি তথাকথিত ভার্চুয়াল ঠিকানা (কোনও মাইক্রোকন্ট্রোলারে সত্যই ভার্চুয়াল নয়) যেখানে কার্যকর হয় চলাকালীন ভেরিয়েবল stored mainশুরুর আগে প্রাথমিক মানগুলি ভার্চুয়াল ঠিকানায় লোড ঠিকানা থেকে অনুলিপি করা হয়। আপনার শূন্য সংরক্ষণ করার দরকার .bssনেই , সুতরাং এর প্রাথমিক মানগুলি সংরক্ষণ করার দরকার নেই। sourceware.org/binutils/docs/ld/...
starblue

1

প্রোগ্রামার বাছাই করা যে কোনও স্মৃতিতে কোনও ডেটা যেতে পারে, সাধারণত সিস্টেমটি সর্বোত্তমভাবে কাজ করে (এবং এটি ব্যবহার করার উদ্দেশ্যে তৈরি হয়) যেখানে ডেটা ব্যবহারের প্রোফাইল মেমরির পড়ুন / লেখার প্রোফাইলের সাথে মেলে।

উদাহরণস্বরূপ প্রোগ্রামের কোডটি হ'ল ডাব্লুএফআরএম (লেখুন কয়েক জন পড়ুন), এবং এর প্রচুর পরিমাণ রয়েছে। এটি দুর্দান্তভাবে ফ্ল্যাশ ফিট করে। আরএম একবার রম OTOH ডাব্লু হয়।

প্রচুর পড়া এবং লেখার সাথে স্ট্যাক এবং গাদা ছোট। এটি র‌্যামের সেরা ফিট করে।

EEPROM এর যে কোনও একটিরও ব্যবহার ভালভাবে মানায় না তবে এটি ক্ষুদ্র পরিমাণে ডেটা প্রোফাইজড পাওয়ার সাপ্লাই জুড়ে থাকে, তাই ব্যবহারকারীর নির্দিষ্ট প্রারম্ভিক ডেটা এবং সম্ভবত লগিংয়ের ফলাফল।

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