এখানে বিভিন্ন ধরণের উত্তর ... বেশিরভাগ ক্ষেত্রে বিভিন্নভাবে সমস্যাটি সমাধান করা।
আমি 25 বছরেরও বেশি সময় ধরে এম্বেড করা নিম্ন স্তরের সফ্টওয়্যার এবং ফার্মওয়্যার বিভিন্ন ভাষায় লিখে চলেছি - বেশিরভাগ সি (তবে এডা, ওকাম 2, পিএল / এম, এবং পথের বিভিন্ন ধরণের সমাবেশে) rs
দীর্ঘ সময় চিন্তাভাবনা এবং পরীক্ষার এবং ত্রুটির পরে, আমি এমন একটি পদ্ধতিতে স্থির হয়েছি যা ফলাফলগুলি বেশ দ্রুত ফল পায় এবং পরীক্ষার মোড়ক এবং জোতাগুলি তৈরি করা মোটামুটি সহজ (যেখানে তারা মূল্য সংযোজন করেছে!)
পদ্ধতিটি এরকম কিছু হয়:
আপনি যে প্রতিটি প্রধান পেরিফেরিয়ালটি ব্যবহার করতে চান তার জন্য একটি ড্রাইভার বা হার্ডওয়্যার বিমূর্ত কোড ইউনিট লিখুন। প্রসেসরের সূচনা করার জন্য একটি লিখুন এবং সবকিছু সেট আপ করুন (এটি বন্ধুত্বপূর্ণ পরিবেশ তৈরি করে)। সাধারণত ছোট এম্বেড হওয়া প্রসেসরের উপর - আপনার এভিআর উদাহরণ হিসাবে - এখানে 10 - 20 টি ইউনিট থাকতে পারে, সমস্ত ছোট। এগুলি ইনিশিয়ালাইজের জন্য ইউনিট হতে পারে, আনস্ল্যাড মেমোরি বাফারগুলিতে A / D রূপান্তর, বিটওয়াস আউটপুট, পুশবটন ইনপুট (কোনও নমুনা কেবল নমুনা নয়), নাড়ি প্রস্থের মড্যুলেশন ড্রাইভার, ইউআরটি / সাধারণ সিরিয়াল ড্রাইভারগুলির ব্যবহার বিঘ্ন এবং ছোট আই / ও বাফারগুলির জন্য হতে পারে। আরও কয়েকটি থাকতে পারে - যেমন EEPROM, EPROM, বা অন্যান্য I2C / SPI ডিভাইসের জন্য I2C বা SPI ড্রাইভার।
প্রতিটি হার্ডওয়্যার বিমূর্তকরণ (এইচএল) / ড্রাইভার ইউনিটগুলির জন্য, আমি তার পরে একটি পরীক্ষা প্রোগ্রাম লিখি। এটি সিরিয়াল পোর্ট (ইউআআরটি) এবং প্রসেসর ইন-এর উপর নির্ভর করে - সুতরাং প্রথম পরীক্ষা প্রোগ্রামটি সেই 2 টি ইউনিট কেবলমাত্র ব্যবহার করে এবং কেবল কিছু বেসিক ইনপুট এবং আউটপুট করে। এটি আমাকে পরীক্ষা করতে দেয় যে আমি প্রসেসরটি শুরু করতে পারি এবং আমার বেসিক ডিবাগ সমর্থন সিরিয়াল আই / ও কাজ করছে। একবার এটি কার্যকর হয় (এবং কেবল তখনই) আমি কি তবে অন্যান্য এইচএল পরীক্ষার প্রোগ্রামগুলি বিকাশ করব, এটি ভাল ভাল ইউআরটি এবং আইএনআইটি ইউনিটের শীর্ষে তৈরি করব building সুতরাং আমার সিরিয়াল ডিবাগ টার্মিনালে বিটওয়াইস ইনপুটগুলি পড়তে এবং এগুলি একটি সুন্দর ফর্মে (হেক্স, দশমিক, যাই হোক না কেন) প্রদর্শন করার জন্য টেস্ট প্রোগ্রাম থাকতে পারে। এরপরে আমি EEPROM বা EPROM পরীক্ষা প্রোগ্রামের মতো আরও বড় এবং জটিল জিনিসগুলিতে যেতে পারি - আমি এই মেনুগুলির বেশিরভাগ চালিত করি যাতে চালানোর জন্য, এটি চালানোর জন্য এবং ফলাফলটি দেখতে কোনও পরীক্ষা নির্বাচন করতে পারি। আমি এটি স্ক্রিপ্ট করতে পারি না তবে সাধারণত আমি ডোন করি না '
আমার সমস্ত এইচএল চালানোর পরে, আমি তার পরে নিয়মিত টাইমার টিক পাওয়ার কোনও উপায় খুঁজে পাই। এটি সাধারণত 4 থেকে 20 এমএসের মধ্যে কোথাও হারে হয়। এটি অবশ্যই নিয়মিত হতে হবে, একটি বিঘ্নিত মধ্যে উত্পন্ন। কাউন্টারগুলির রোলওভার / ওভারফ্লো সাধারণত এটি কীভাবে করা যায় তা। বাধা হ্যান্ডলার তারপরে একটি বাইট সাইজের "semaphore" বৃদ্ধি করে। আপনার যদি প্রয়োজন হয় তবে এই মুহুর্তে আপনি পাওয়ার ম্যানেজমেন্টের সাথে চারপাশে ঝাঁকুনি করতে পারেন। সেমফোরের ধারণাটি হল এর মান> 0 হলে আপনার "প্রধান লুপ" চালানো দরকার।
এক্সিকিউটিভ মূল লুপ চালায়। এটি বেশিরভাগ ক্ষেত্রে কেবল সেমফোরটি অ-0 হয়ে যাওয়ার জন্য অপেক্ষা করে (আমি এই বিবরণটি দূরে রেখেছি)। এই মুহুর্তে, আপনি এই টিকগুলি গণনা করতে কাউন্টারগুলির সাথে খেলতে পারেন (কারণ আপনি টিকের হারটি জানেন) এবং তাই আপনি বর্তমান নির্বাহী টিকটি 1 সেকেন্ড, 1 মিনিটের ব্যবধানে এবং অন্যান্য সাধারণ ব্যবধানগুলির জন্য অন্তর্ভুক্ত কিনা তা দেখানোর জন্য পতাকা নির্ধারণ করতে পারেন you ব্যবহার করতে চান। একবার নির্বাহী জেনে রাখবেন যে সেমফোরটি> 0 হয়, এটি প্রতিটি "অ্যাপ্লিকেশন" প্রক্রিয়া "আপডেট" ফাংশনটির মাধ্যমে একক পাস চালায়।
অ্যাপ্লিকেশন প্রক্রিয়াগুলি কার্যকরভাবে একে অপরের পাশে বসে এবং একটি "আপডেট" টিক দিয়ে নিয়মিতভাবে চালিত হয়। এটি কেবল নির্বাহী দ্বারা ডাকা একটি ফাংশন। এটি কার্যকরভাবে খুব সহজে গৃহ-বৃদ্ধ হওয়া আরটিওএসের সাথে দুর্বল-ম্যানসকে বহু-কাজ করা যা সমস্ত অ্যাপ্লিকেশনগুলিতে প্রবেশের উপর নির্ভর করে, কিছুটা কাজ করে এবং বেরিয়ে আসে। অ্যাপ্লিকেশনগুলিকে তাদের নিজস্ব রাষ্ট্রের ভেরিয়েবলগুলি বজায় রাখতে হবে এবং দীর্ঘ চলমান গণনা করতে পারে না কারণ ন্যায়পরায়ণতার জন্য জোরপূর্বক কোনও প্রাক-কার্যকর অপারেটিং সিস্টেম নেই। অবিশ্বাস্যভাবে অ্যাপ্লিকেশনগুলির চলমান সময় (ক্রমে) বড় টিকের সময়কালের চেয়ে কম হওয়া উচিত।
উপরোক্ত পদ্ধতির সাহায্যে সহজেই প্রসারিত করা যায় যাতে আপনার যোগাযোগের স্ট্যাকের মতো জিনিস থাকতে পারে যা সংযোজনীয়ভাবে চালানো হয় এবং কমস বার্তাগুলি অ্যাপ্লিকেশনগুলিতে পৌঁছে দেওয়া যায় (আপনি "আরএক্স_মেসেজ_হ্যান্ডলার" এর প্রতিটিটিতে একটি নতুন ফাংশন যুক্ত করেন এবং আপনি কোনও বার্তা প্রেরণকারী লিখেন যা চিত্রগুলি কোন আবেদন পাঠাতে হবে) out
এই পদ্ধতির আপনার নামকরণের যে কোনও যোগাযোগ ব্যবস্থার জন্য যথেষ্ট কাজ করে - এটি বহু মালিকানাধীন সিস্টেম, ওপেন স্ট্যান্ডার্ড কমস সিস্টেমগুলির জন্য কাজ করতে পারে (এবং এটি করেছে) এটি টিসিপি / আইপি স্ট্যাকের জন্যও কাজ করে।
এটির সাথে সংজ্ঞায়িত ইন্টারফেসগুলি সহ মডুলার টুকরাগুলিতে তৈরি হওয়ার সুবিধাও রয়েছে। আপনি যে কোনও সময় টুকরো টুকরো টানতে পারেন এবং বিভিন্ন টুকরো স্থানে রাখতে পারেন। প্রতিটি পয়েন্টে আপনি পরীক্ষার জোতা বা হ্যান্ডলারগুলি যুক্ত করতে পারেন যা পরিচিত ভাল নিম্ন স্তরগুলির উপর ভিত্তি করে তৈরি করে (নীচের জিনিসগুলি)। আমি দেখেছি যে প্রায় 30% থেকে 50% কোনও ডিজাইনের বিশেষত লিখিত ইউনিট পরীক্ষাগুলি যা সাধারণত মোটামুটি সহজেই যুক্ত হয় তা যুক্ত করে উপকৃত হতে পারে।
আমি এই সমস্ত পদক্ষেপ আরও এগিয়ে নিয়েছি (এই ধারণাটি করা অন্য কারও কাছ থেকে আমি একটি ধারণা পেয়েছি) এবং পিসির সমতুল্য এইচএএল স্তরটি প্রতিস্থাপন করেছি। সুতরাং উদাহরণস্বরূপ আপনি পিসিতে সি / সি ++ এবং উইনফরমগুলি বা অনুরূপ ব্যবহার করতে পারেন এবং যত্ন সহকারে কোডটি লিখে আপনি প্রতিটি ইন্টারফেস অনুকরণ করতে পারেন (উদাহরণস্বরূপ EEPROM = একটি ডিস্ক ফাইল পিসি মেমরিতে পড়া) এবং তারপরে একটি পিসিতে পুরো এমবেডেড অ্যাপ্লিকেশনটি চালাতে পারেন। একটি বন্ধুত্বপূর্ণ ডিবাগিং পরিবেশ ব্যবহারের ক্ষমতা বিপুল পরিমাণ সময় এবং প্রচেষ্টা সাশ্রয় করতে পারে। কেবলমাত্র বড় প্রকল্পগুলি সাধারণত এই পরিশ্রমের ন্যায্যতা প্রমাণ করতে পারে।
উপরের বর্ণনাটি এমন কিছু যা আমি এম্বেড থাকা প্ল্যাটফর্মগুলিতে কীভাবে করি তার পক্ষে অনন্য নয় - আমি বহু বাণিজ্যিক সংস্থায় এসেছি যা একই কাজ করে। এর কাজটি সাধারণত বাস্তবায়নে সম্পূর্ণ ভিন্ন তবে নীতিগুলি প্রায়শই একই রকম হয়।
আমি আশা করি উপরেরটি কিছুটা স্বাদ দেয় ... এই পদ্ধতিটি ছোট এমবেডেড সিস্টেমগুলির জন্য কাজ করে যা 100 কে বা আরও সোর্স লাইনের দানবগুলিতে স্থায়ীভাবে চালিত দানবগুলিতে আক্রমণাত্মক ব্যাটারি পরিচালনার সাহায্যে কয়েক কেবিতে চালিত হয়। আপনি যদি উইন্ডোজ সিই বা এর মতো কোনও বড় ওএসে "এম্বেডড" চালনা করেন তবে উপরের সমস্তগুলি সম্পূর্ণ অপ্রতিরোধ্য। তবে এটি বাস্তব এম্বেড প্রোগ্রামিং নয়, যাইহোক।