সব ফাঁদ সবসময় সংজ্ঞায়িত করা উচিত?


18

আমি এখন dsPIC 30F4013 এর সাথে দুটি ঘটনা দেখেছি যেখানে অপরিজ্ঞাপিত ফাঁদের কারণে নিয়ামকটি পুনরায় সেট করতে চলেছে। এই ফাঁদগুলি প্রথম স্থানে কেন উত্থিত হচ্ছিল তা এখনও একটি রহস্য, তবে এটি আমার তাত্ক্ষণিক প্রশ্ন নয়। আমি ভাবতে শুরু করি যে সব ফাঁদগুলি সর্বদা সংজ্ঞায়িত করা একটি ভাল প্রোগ্রামিং অনুশীলন হবে, যদিও ফাঁদগুলি কখনই না ঘটে, তাই আমি এলোমেলো রিসেটের পরিবর্তে কমপক্ষে একটি পরিষ্কার ত্রুটি বার্তা পাই। এটি কি এমন স্ট্যান্ডার্ড অভ্যাস যা আমি অসচেতন? এই অনুশীলনের কি অসুবিধাগুলি আমার বিবেচনা করা উচিত?


4
আপনার প্রশ্নের উত্তর নয়, তবে আমি কিছুক্ষণ আগে dsPIC এবং PIC24 সিস্টেমে এই ধরণের লক্ষণগুলি সহ ভোগ করেছি। আমার ক্ষেত্রে ট্র্যাপগুলি কোডের বিটগুলির ফলে হয়েছিল যেখানে আমি 16-বিট মানগুলিতে ডি-রেফারেন্সিং পয়েন্টার ছিলাম এবং এই পয়েন্টারগুলি নিজেরাই বিজোড় (না-এমনকি) মান ছিল, যেহেতু তারা একটি বৃত্তাকার কমস বাফারে নির্দেশ করছে - এবং আমার কোনও পূর্ব ছিল না 16-বিট মানটি বিজোড় বা এমনকি সীমানায় শুরু হবে কিনা তা জানার উপায়। এক্সসি 16 সংকলক আপনাকে এখানে হার্ডওয়ারের হ্যাঙ্গআপগুলি থেকে রক্ষা করে না। আমি এই ফাংশনগুলির জন্য একটি মোড়ক ম্যাক্রো লিখেছিলাম যা 2 8-বিট পয়েন্টার ডি-রেফগুলি বাধ্য করেছিল।
brhans

উত্তর:


13

আমার অনানুষ্ঠানিক নিয়মটি হ'ল:

  1. যদি কোনও বাধা সক্ষম হয়, তবে আপনার এমন কোড থাকা উচিত যা এটি পরিচালনা করে।
  2. আপনি যদি কোনও বাধার জন্য কোড না লিখে থাকেন তবে এটি অক্ষম করুন।
  3. যদি আপনি এটি অক্ষম করতে না পারেন তবে এর জন্য কোড লিখুন।

এমনকি সেই নিয়ম ছাড়াই, যদিও ডেটা শীট আপনার প্রশ্নের স্পষ্ট উত্তর দেয়:

যদি কোনও ফাঁদে ত্রুটি শর্তের পরিস্থিতিতে ব্যবহারকারী সংশোধনমূলক পদক্ষেপ নেওয়ার ইচ্ছা না করে তবে এই ভেক্টরগুলিকে অবশ্যই একটি ডিফল্ট হ্যান্ডলারের ঠিকানা দিয়ে লোড করতে হবে যাতে কেবল রিসেট নির্দেশ থাকে। অন্যদিকে, যদি কোনও অবৈধ ঠিকানা সম্বলিত ভেক্টরকে কল করা হয়, তবে একটি ঠিকানা ত্রুটির ফাঁদ তৈরি হয়।

( উত্স , বিভাগ 8.3, প্রথম নোট)

প্রদত্ত যে আপনি ট্র্যাপগুলি মাস্ক করতে পারবেন না , তবে আপনাকে অবশ্যই সেগুলি পরিচালনা করতে হবে must যদি আপনি কোনও নির্দিষ্ট ফ্যাশনে ফাঁদটি মোকাবেলা করতে ইচ্ছুক না হন তবে উপযুক্ত পদ্ধতিটি হ'ল একটি RESETনির্দেশ কার্যকর করা ।


হা. সমস্ত ফাঁদগুলির জন্য লক্ষ্য সহ আমার কাছে একটি মানক মডিউল রয়েছে।
অলিন ল্যাথ্রপ

16

হ্যাঁ, এটি একটি ভাল ধারণা - কেবলমাত্র ডাউনসাইডটি অতিরিক্ত কোডের আকারের কিছুটা, এবং ট্র্যাপটি দিয়ে কী করতে হবে তা আপনাকে সিদ্ধান্ত নিতে হবে (সিরিয়াল পোর্টে একটি বার্তা প্রেরণ করবেন? "ফেইলিড" আলো চালু করবেন? নিঃশব্দে পুনরায় বুট করুন? ইত্যাদি) )


4
আমার সাধারণত অসীম এনওপি / গোটো লুপটিতে প্রসেসরটি চালানো হয়। এইভাবে স্ট্যাকটি ফাঁদ থেকে দূষিত হয়নি, এবং ডিবাগ করার সময় আমার এটি খুলে দেখার এবং কী ঘটেছিল তা বের করার সুযোগ রয়েছে। আমি প্রায়শই ফাঁদ পাই না, তবে 80% সময় এটি একটি বিজোড় ঠিকানা ফাঁদ, সাধারণত কারণ আবর্জনা পয়েন্টার হিসাবে লোড হয়ে যায়। কখনও কখনও স্ট্যাক পয়েন্টারটি দূষিত হয়ে যায় এবং বিজোড় অ্যাড্রেস ট্র্যাপগুলি তৈরি করে। এগুলি ডিবাগ করা শক্ত কারণ স্ট্যাকটি আর নেই। ভাগ্যক্রমে, এটি সত্যিই বিরল।
অলিন ল্যাথ্রপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.