সংক্ষিপ্ত উত্তরটি হ'ল: PROGMEM ডেটা কেবল পঠনযোগ্য।
ফ্ল্যাশ মেমরির সীমাবদ্ধতাগুলি
বোঝার জন্য প্রথম জিনিসটি হ'ল ফ্ল্যাশ মেমরি (যেখানে প্রোগ্রাম স্পেস থাকে) দীর্ঘমেয়াদী স্থির স্টোরেজের জন্য ডিজাইন করা হয়েছে। এটি থেকে পড়া খুব দ্রুত এবং সুনির্দিষ্ট। তবে, সাধারণভাবে বলতে গেলে, আপনি এটিকে বাই-বাই-বাইট ভিত্তিতে সংশোধন করতে পারবেন না (যেমন কোনও নির্দিষ্ট ভেরিয়েবল পরিবর্তন করা)। আপনাকে সাধারণত এটি মুছতে হবে এবং বড় ব্লকগুলিতে পুনরায় লিখতে হবে। এটি রান-টাইম ম্যানিপুলেশনের জন্য এটি পুরোপুরি অযৌক্তিক করে তোলে, কারণ আপনি মুছে ফেলতে এবং লেখার চক্রটি চালানোর সময় আপনাকে অন্য কোথাও প্রচুর অপ্রয়োজনীয় তথ্য সংরক্ষণ করতে হবে।
প্রকল্পটি আসলে কী করে
আপনার কোডে নির্দিষ্ট কোনও আক্ষরিক ডেটা (যেমন স্ট্রিং এবং সংখ্যা) সর্বদা প্রোগ্রাম স্পেসে থাকে (যেমন ফ্ল্যাশটিতে)। তবে, যখন আপনার স্কেচটি সেই সময় ডেটা ব্যবহার করতে চায়, তখন সাধারণত এটির জন্য কিছু স্থান বরাদ্দ করতে হয় এবং এটি অনুলিপি করতে হয়। এর অর্থ আপনার দুটি অনুলিপি শেষ হয়েছে: ফ্ল্যাশের স্থির মূল এবং এসআরএমে অস্থায়ী অনুলিপি।
আপনি যখন প্রগেম মডিফায়ার ব্যবহার করেন, আপনি এসআরএমে এটি দ্বিতীয় কপিটি তৈরি না করার জন্য বলছেন। পরিবর্তে, আপনার স্কেচটি কেবলমাত্র ফ্ল্যাশটিতে আসলটি অ্যাক্সেস করবে। এটি খুব কার্যকর যদি আপনার কেবলমাত্র ডেটা পড়তে হয়, কারণ এটি বরাদ্দ এবং অনুলিপি অপারেশনকে এড়িয়ে চলে।
তবে, ডেটা পরিবর্তন করতে চাইলে এসআরএমে এটি অনুলিপি করা অপরিহার্য। আমি উপরে উল্লিখিত ফ্ল্যাশ সীমাবদ্ধতাগুলি বাদ দিয়েও এটি কোড সুরক্ষার প্রশ্ন।
আপনি পরিবর্তন করতে পারবেন হন, তাহলে ডাটা প্রোগ্রাম স্থান সংরক্ষিত, তাহলে এটি কথাটি অনুসরণ করে যে আপনার কাছে সংশোধন পারে কোড প্রোগ্রাম স্থান সংরক্ষণ করা হয়। এর অর্থ হ'ল কোনও সাধারণ ভুল (বা তাত্ত্বিকভাবে একটি দূষিত আক্রমণ) এর ফলে আপনার স্কেচটি রান-টাইমে আংশিক বা পুরোপুরি আবার লেখা যেতে পারে। এতে কোনও অনাকাঙ্ক্ষিত ফলাফল হতে পারে, কেবল কাজ করা থেকে শুরু করে কোনও সংযুক্ত সরঞ্জামকে ক্ষতিগ্রস্থ / ধ্বংস করে।
আরও তথ্য
আপনি এখানে থেকে নিম্ন-স্তরের PROGMEM স্টাফ সম্পর্কে আরও শিখতে পারেন:
একই PROGMEM টিউটোরিয়ালটির একটি পুরানো সংস্করণ এখানে উপলভ্য: