constএর অর্থ হল যে ভেরিয়েবলটি সি কোড দ্বারা পরিবর্তন করা যায় না, এটি পরিবর্তন করতে পারে না তা নয়। এর অর্থ হ'ল কোনও নির্দেশই চলকটিতে লিখতে পারে না, তবে এর মান এখনও পরিবর্তিত হতে পারে।
volatileএর অর্থ হল যে চলকটি যে কোনও সময় পরিবর্তিত হতে পারে এবং সুতরাং কোনও ক্যাশেড মান ব্যবহার করা যায় না; ভেরিয়েবলের প্রতিটি অ্যাক্সেস তার মেমরি ঠিকানায় চালিত করতে হয়।
যেহেতু প্রশ্নটি "এম্বেডড" ট্যাগ করা হয়েছে এবং মনে tempকরা একটি ব্যবহারকারী পরিবর্তনশীল হিসাবে ঘোষিত হয়েছে, তাই কোনও হার্ডওয়ার-সম্পর্কিত রেজিস্ট্রার নয় (যেহেতু এগুলি সাধারণত পৃথক .h ফাইলে পরিচালনা করা হয়) তাই বিবেচনা করুন:
একটি এম্বেড থাকা প্রসেসর যার উভয়ই অস্থির পঠন-লিখনের ডেটা মেমরি (র্যাম) এবং অ-উদ্বায়ী পঠনযোগ্য ডেটা মেমরি রয়েছে, উদাহরণস্বরূপ ভন-নিউম্যান আর্কিটেকচারে ফ্ল্যাশ মেমরি, যেখানে ডেটা এবং প্রোগ্রাম স্পেস একটি সাধারণ ডেটা এবং ঠিকানা বাস ভাগ করে।
যদি আপনি const tempকোনও মান (কমপক্ষে 0 থেকে আলাদা হয়) হিসাবে ঘোষণা করেন তবে সংকলকটি ফ্ল্যাশ স্পেসের কোনও ঠিকানাকে ভেরিয়েবল বরাদ্দ করবে, কারণ এটি কোনও র্যাম ঠিকানার জন্য নির্ধারিত হলেও, প্রাথমিক মান সংরক্ষণ করার জন্য এটি এখনও ফ্লেশ মেমরির প্রয়োজন ভেরিয়েবলের, সমস্ত ক্রিয়াকলাপ কেবল পঠনযোগ্য হওয়ায় র্যামের ঠিকানাটিকে স্থানের অপচয় হিসাবে তৈরি করে।
ফলে:
int temp;র্যামে সঞ্চিত একটি পরিবর্তনশীল, প্রারম্ভকালে (সিএসআর্ট) 0-এ শুরু হয়, ক্যাশেড মানগুলি ব্যবহার করা যেতে পারে।
const int temp;(পঠন-ওনি) ফ্ল্যাশ-এ সঞ্চিত একটি পরিবর্তনশীল, সংকলক সময়ে 0 থেকে শুরু করে, ক্যাশেড মানগুলি ব্যবহার করা যেতে পারে।
volatile int temp; র্যামে সঞ্চিত একটি পরিবর্তনশীল, প্রারম্ভকালে (সিএসআর্ট) 0-এ শুরু হয়, ক্যাশেড মানগুলি ব্যবহৃত হবে না।
const volatile int temp; এটি একটি পরিবর্তনশীল (পঠন-অনি) ফ্ল্যাশ-এ সঞ্চিত, সংকলক সময়ে 0 থেকে আরম্ভ করা, ক্যাশেড মানগুলি ব্যবহৃত হবে না
এখানে দরকারী অংশ আসে:
আজকাল বেশিরভাগ এম্বেড থাকা প্রসেসরের একটি বিশেষ ফাংশন মডিউল দ্বারা তাদের কেবল পঠনযোগ্য অ-উদ্বায়ী মেমরিতে পরিবর্তন করার ক্ষমতা রয়েছে, যা ক্ষেত্রে const int tempরানটাইমে পরিবর্তিত হতে পারে, সরাসরি নয় ought অন্যভাবে বলা হয়েছে, কোনও ফাংশন যেখানে tempঠিক আছে ঠিক সেই স্থানে মানটি সংশোধন করতে পারে ।
একটি ব্যবহারিক উদাহরণ tempহ'ল ডিভাইস সিরিয়াল নম্বরটি ব্যবহার করা । এম্বেড হওয়া প্রসেসরটি প্রথমবার চালিত tempহবে , 0 (বা ঘোষিত মান) এর সমান হবে এবং কোনও ফাংশন উত্পাদনের সময় একটি পরীক্ষা চালাতে এই সত্যটি ব্যবহার করতে পারে এবং যদি সফলফুল হয় তবে একটি ক্রমিক নম্বর নির্ধারিত করতে বলুন এবং এর tempমাধ্যমে এর মানটি সংশোধন করুন একটি বিশেষ অনুষ্ঠানের। কিছু প্রসেসরের কেবলমাত্র এটির জন্য ওটিপি (এককালীন প্রোগ্রামযোগ্য) মেমরির সাথে একটি বিশেষ ঠিকানা পরিসীমা রয়েছে।
তবে এখানে পার্থক্য আসে:
যদি const int tempএক সময়ের-প্রোগ্রামযোগ্য সিরিয়াল নম্বর পরিবর্তে কোনও পরিবর্তনযোগ্য আইডি হয় এবং এটি ঘোষিত না হয় তবে volatileএকটি ক্যাশেড মানটি পরবর্তী বুট অবধি ব্যবহার করা যেতে পারে, যার অর্থ নতুন আইডি পরবর্তী রিবুট অবধি বৈধ হতে পারে না বা আরও খারাপ কিছু ফাংশন অন্যরা হয়ত নতুন মানটি ব্যবহার করতে পারে যখন অন্যরা পুরানো ক্যাশেড মানটি অবিরত পুনরায় ব্যবহার করতে পারে। যদি const int tempআইএস ঘোষিত হয় voltaileতবে আইডি পরিবর্তনটি তত্ক্ষণাত কার্যকর হবে।
const volatile int temp;ব্লক স্কোপে (অর্থাত্ অভ্যন্তরীণ{ }) ব্যবহার করবেন না , সেখানে এটির কোনও ব্যবহার নেই।