আমি কি PROGMEM ব্যবহার করে ফ্ল্যাশ মেমোরিতে লিখতে পারি?


11

আরডুইনোর ডকুমেন্টেশনে, আমি উদ্ধৃতি দিয়েছি:

http://playground.arduino.cc/Learning/ মেমোরি নোট: ফ্ল্যাশ (PROGMEM) মেমরি কেবল প্রোগ্রাম বার্ন সময়ে পপুলেট করা যায়। প্রোগ্রামটি চলমান শুরু হওয়ার পরে আপনি> ফ্ল্যাশের মানগুলি পরিবর্তন করতে পারবেন না।

এবং প্রোগ্রামের বিবরণে:

http://arduino.cc/en/References/PROGMEM এসআরএএম এর পরিবর্তে ফ্ল্যাশ (প্রোগ্রাম) মেমরিতে ডেটা সঞ্চয় করুন। একটি আরডুইনো বোর্ডে বিভিন্ন ধরণের মেমরির বিবরণ রয়েছে।

PROGMEM কীওয়ার্ডটি একটি পরিবর্তনশীল পরিবর্তনকারী, এটি কেবল pgmspace.h এ সংজ্ঞায়িত ডেটাটাইপগুলির সাথে ব্যবহার করা উচিত। এটি সংকলকটিকে "এই তথ্য ফ্ল্যাশ মেমরির মধ্যে রাখুন" এর পরিবর্তে এসআরএমে রাখে, যেখানে এটি সাধারণত যায়।

তাহলে আমরা কি পারি না বা পারি না? নাকি এটি একই জিনিস নয়?


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

পৃষ্ঠা লেখার ব্লকগুলি লেখাকে অবৈধভাবে ফ্ল্যাশ করে না। আসলে এর কিছু প্রতীক্ষিত ছিল।
অ্যান্ডেলসজি জিমেইল

উত্তর:


9

সংক্ষিপ্ত উত্তরটি হ'ল: PROGMEM ডেটা কেবল পঠনযোগ্য।

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

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

আপনি যখন প্রগেম মডিফায়ার ব্যবহার করেন, আপনি এসআরএমে এটি দ্বিতীয় কপিটি তৈরি না করার জন্য বলছেন। পরিবর্তে, আপনার স্কেচটি কেবলমাত্র ফ্ল্যাশটিতে আসলটি অ্যাক্সেস করবে। এটি খুব কার্যকর যদি আপনার কেবলমাত্র ডেটা পড়তে হয়, কারণ এটি বরাদ্দ এবং অনুলিপি অপারেশনকে এড়িয়ে চলে।

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

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

আরও তথ্য
আপনি এখানে থেকে নিম্ন-স্তরের PROGMEM স্টাফ সম্পর্কে আরও শিখতে পারেন:

একই PROGMEM টিউটোরিয়ালটির একটি পুরানো সংস্করণ এখানে উপলভ্য:


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