আমি কিছু সি কোড পড়ছি এবং প্রোগ্রামে এই ঘোষণাটি এসেছি:
unsigned char serv_ctr @0x0002;
কেউ আমাকে ডকুমেন্টেশনের দিকে নির্দেশ করতে পারে, বা এমপ্ল্যাব এক্সসি 8 ভি 1.35 সি সংকলকটিতে "@ 0x0002" কী তা ব্যাখ্যা করতে পারে ?
আমি কিছু সি কোড পড়ছি এবং প্রোগ্রামে এই ঘোষণাটি এসেছি:
unsigned char serv_ctr @0x0002;
কেউ আমাকে ডকুমেন্টেশনের দিকে নির্দেশ করতে পারে, বা এমপ্ল্যাব এক্সসি 8 ভি 1.35 সি সংকলকটিতে "@ 0x0002" কী তা ব্যাখ্যা করতে পারে ?
উত্তর:
এটি ভেরিয়েবলটি রাখার জন্য একটি নিখুঁত ঠিকানা নির্দিষ্ট করতে হবে।
থেকে XC8 কম্পাইলার ম্যানুয়াল পৃষ্ঠা 27, অধ্যায় 2.5.2 পরম অ্যাড্রেসিং :
ভেরিয়েবল এবং ফাংশন
__at()
কনস্ট্রাক্ট ব্যবহার করে একটি নির্ভুল ঠিকানায় স্থাপন করা যেতে পারে
......
২.২.২.২ বিভাজনসমূহ
8-বিট সংকলকগুলি একটি নিখুঁত ঠিকানা নির্দিষ্ট করতে একটি @ প্রতীক ব্যবহার করেছে
@
সি ভাষার একটি সাধারণ অ-মানক এক্সটেনশন যা আপনাকে নির্দিষ্ট ঠিকানায় ভেরিয়েবল ঘোষণা করতে দেয় allows এটি মেমরি-ম্যাপযুক্ত হার্ডওয়্যার রেজিস্টার ইত্যাদির জন্য ব্যবহার করা যেতে পারে যার ক্ষেত্রে ভেরিয়েবলটি অবশ্যই ঘোষণা করতে হবে volatile
, সুতরাং আপনার উদাহরণটি ভুল।
অন্যান্য সংকলকগুলি এর মতো কিছু ব্যবহার করে __attribute__(section...
বা এর সবগুলিই #pragma ...
অ-মানক সি use
একমাত্র যুক্তিযুক্ত কারণ (যদি থাকে তবে) কেন চেইনগুলি এটি করে, তা হল ক্রেপি ডিবাগারগুলিতে রেজিস্টার ডিবাগিং সক্ষম করা। অ-মানক সিনট্যাক্স নিশ্চিত করবে যে নিবন্ধক লিঙ্কার আউটপুট এবং ডিবাগ তথ্যের অংশ হয়ে যায়। যার ফলে আপনি অন্য কোনও পরিবর্তনশীল দেখতে পাচ্ছেন ঠিক তেমনি ক্র্যাপি ডিবাগারেও রেজিস্টারটি দেখতে পারবেন।
আপনার যদি একটি ভাল ডিবাগার থাকে তবে এতে আপনার নির্দিষ্ট এমসিইউ সম্পর্কে সমর্থন এবং সচেতনতা থাকবে। তারপরে আপনাকে সি কোডে অ-মানক ক্রেপ লাগবে না, তবে আপনি এর পরিবর্তে খাঁটি, বহনযোগ্য মান সি লিখতে পারেন:
#define serv_ctr ( *(volatile uint8_t*)0x0002u )
@
একাধিক মেমরি স্পেস বা অন্যান্য সমস্যা সহ নোটেশন টার্গেট প্ল্যাটফর্মগুলি দেখেছি যাতে @
নোটেশনটি ব্যবহার করে ঘোষিত বেশিরভাগ জিনিসগুলি এক্সটেনশন ছাড়াই করা যায় এমন যে কোনও কিছু থেকে আলাদা আচরণ করবে।
একটি সংক্ষিপ্ত সম্প্রসারণ:
এটি xc8 2.0 এবং তার বেশি কাজ করে না। আপনাকে এখন লিখতে হয়েছিল:
unsigned char serv_ctr __at(0x0002);
serv_ctr
একটি সম্পূর্ণ পরিবর্তন ( ) একটি ভেরিয়েবল রাখতে 0x0002
।
XC8 2.0 এর সাহায্যে @
সিন্টেক্স ব্যবহার করে আপনার পুরানো কোডটি সংকলন করা সম্ভব হয় যদি আপনি "C90" ফর্ম্যাটটি ব্যবহারের জন্য সংকলক সেটিংস সেট করেন। সেটিংসটি দেখে মনে হচ্ছে এটি "XC8 গ্লোবাল বিকল্পগুলি" এর অধীনে এবং এটি "সি স্ট্যান্ডার্ড" নামে পরিচিত।
@
কেবল এমপ্ল্যাব নয়, সিনট্যাক্সটিকে সমর্থন করে ।