এম্বেড থাকা ডিভাইসে আমি কীভাবে টিডিডি করব?


17

আমি প্রোগ্রামিংয়ে নতুন নই এবং আমি এমনকি এভিআর-তে কিছু নিম্ন স্তরের সি এবং এএসএমের সাথেও কাজ করেছি, তবে আমি সত্যিই বড় আকারের এমবেডেড সি প্রকল্পের আশেপাশে মাথা পেতে পারি না।

রুডি'র টিডিডি / বিডিডি-র দর্শনের দ্বারা অধঃপতিত হওয়ায়, আমি কীভাবে লোকেরা এই জাতীয় কোড লিখি এবং পরীক্ষার জন্য তা বুঝতে অক্ষম। আমি বলছি না এটি একটি খারাপ কোড, আমি কীভাবে এটি কাজ করতে পারে বুঝতে পারছি না।

আমি কিছু নিম্ন স্তরের প্রোগ্রামিংয়ে আরও বেশি পেতে চাইছিলাম, তবে কীভাবে এটি ব্যবহার করা যায় সে সম্পর্কে আমার সত্যিই ধারণা নেই, যেহেতু এটি সম্পূর্ণরূপে ভিন্ন মানসিকতার মতো যা আমি অভ্যস্ত। পয়েন্টার গাণিতিকগুলি বুঝতে, বা কীভাবে বরাদ্দ করা মেমরিটি আমার কাজ করতে সমস্যা হয় না, তবে আমি যখন রুবীর তুলনায় সি / সি ++ কোড দেখতে কতটা জটিল দেখি তখন এটি অসম্ভব শক্ত মনে হয়।

যেহেতু আমি ইতিমধ্যে নিজেকে একটি আরডিনো বোর্ড অর্ডার করেছি, তাই আমি কিছু নিম্ন স্তরের সিতে আরও যেতে চাই এবং কীভাবে জিনিসগুলি সঠিকভাবে করা যায় তা সত্যই বুঝতে পারি তবে এটি উচ্চ স্তরের ভাষার কোনও নিয়মই প্রয়োগ হয় না বলে মনে হয়।

এম্বেড থাকা ডিভাইসে বা ড্রাইভার বা কাস্টম বুটলোডার ইত্যাদির মতো জিনিসগুলি বিকাশ করার সময় কি টিডিডি করা সম্ভব?


3
হাই দারথ, আমরা আপনাকে সত্যিকারের সি-এর ভয় কাটিয়ে উঠতে সহায়তা করতে পারি না, তবে এম্বেড থাকা ডিভাইসে টিডিডি সম্পর্কে প্রশ্নটি এখানে মূল বিষয়: আমি আপনার প্রশ্নটিকে পরিবর্তিত করে এটি পরিবর্তিত করতে পারি।

উত্তর:


18

প্রথমে, আপনার জানা উচিত যে আপনি যে কোডটি লিখেছেন তা বোঝার চেষ্টা করা নিজের লিখনের চেয়ে 5x শক্ত। আপনি প্রোডাকশন কোড পড়ে সি শিখতে পারেন, তবে এটি করে শেখার চেয়ে অনেক বেশি সময় লাগবে।

রুডি'র টিডিডি / বিডিডি-র দর্শনের দ্বারা অধঃপতিত হওয়ায়, আমি কীভাবে লোকেরা এই জাতীয় কোড লিখি এবং পরীক্ষার জন্য তা বুঝতে অক্ষম। আমি বলছি না এটি একটি খারাপ কোড, আমি কীভাবে এটি কাজ করতে পারে বুঝতে পারছি না।

এটি একটি দক্ষতা; আপনি এটি ভাল পেতে। বেশিরভাগ সি প্রোগ্রামাররা বুঝতে পারে না মানুষ কীভাবে রুবি ব্যবহার করে, তবে এর অর্থ এই নয় যে তারা পারবে না।

এম্বেড থাকা ডিভাইসে বা ড্রাইভার বা কাস্টম বুটলোডার ইত্যাদির মতো জিনিসগুলি বিকাশ করার সময় কি টিডিডি করা সম্ভব?

ঠিক আছে, এই বিষয়ে বই আছে:

এখানে চিত্র বর্ণনা লিখুন যদি কোনও ভুট্টা তা করতে পারে, আপনিও পারেন!

মনে রাখবেন যে অন্যান্য ভাষাগুলি থেকে অনুশীলনের প্রয়োগগুলি সাধারণত কাজ করে না। যদিও টিডিডি বেশ সার্বজনীন।


2
আমি আমার এম্বেড থাকা সিস্টেমগুলির জন্য দেখেছি এমন প্রতিটি টিডিডি কেবল সেই সিস্টেমে ত্রুটিগুলি খুঁজে পেয়েছিল যা ত্রুটিগুলি সমাধান করা সহজ ছিল আমি নিজেরাই সহজেই খুঁজে পেতে পারি। তারা কখনই আমার সাহায্যের প্রয়োজন তা খুঁজে পেতেন না, অন্যান্য চিপগুলির সাথে সময় নির্ভরশীল মিথস্ক্রিয়া এবং মিথস্ক্রিয়াটিকে বাধা দেয়।
কর্টুক

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

এছাড়াও এটি বিকাশ এবং পরীক্ষার বাইরে লক্ষ্য রাখে।
cp.engr

নন-এম্বেডড সি এর জন্য টিডিডি বোঝার জন্য আমি কি এই বইটি অনুসরণ করতে পারি ? কোন ইউজার স্পেস সি প্রোগ্রামিংয়ের জন্য?
-17 মার্চকে ওভাররেচেন্জ করুন

15

এখানে বিভিন্ন ধরণের উত্তর ... বেশিরভাগ ক্ষেত্রে বিভিন্নভাবে সমস্যাটি সমাধান করা।

আমি 25 বছরেরও বেশি সময় ধরে এম্বেড করা নিম্ন স্তরের সফ্টওয়্যার এবং ফার্মওয়্যার বিভিন্ন ভাষায় লিখে চলেছি - বেশিরভাগ সি (তবে এডা, ওকাম 2, পিএল / এম, এবং পথের বিভিন্ন ধরণের সমাবেশে) rs

দীর্ঘ সময় চিন্তাভাবনা এবং পরীক্ষার এবং ত্রুটির পরে, আমি এমন একটি পদ্ধতিতে স্থির হয়েছি যা ফলাফলগুলি বেশ দ্রুত ফল পায় এবং পরীক্ষার মোড়ক এবং জোতাগুলি তৈরি করা মোটামুটি সহজ (যেখানে তারা মূল্য সংযোজন করেছে!)

পদ্ধতিটি এরকম কিছু হয়:

  1. আপনি যে প্রতিটি প্রধান পেরিফেরিয়ালটি ব্যবহার করতে চান তার জন্য একটি ড্রাইভার বা হার্ডওয়্যার বিমূর্ত কোড ইউনিট লিখুন। প্রসেসরের সূচনা করার জন্য একটি লিখুন এবং সবকিছু সেট আপ করুন (এটি বন্ধুত্বপূর্ণ পরিবেশ তৈরি করে)। সাধারণত ছোট এম্বেড হওয়া প্রসেসরের উপর - আপনার এভিআর উদাহরণ হিসাবে - এখানে 10 - 20 টি ইউনিট থাকতে পারে, সমস্ত ছোট। এগুলি ইনিশিয়ালাইজের জন্য ইউনিট হতে পারে, আনস্ল্যাড মেমোরি বাফারগুলিতে A / D রূপান্তর, বিটওয়াস আউটপুট, পুশবটন ইনপুট (কোনও নমুনা কেবল নমুনা নয়), নাড়ি প্রস্থের মড্যুলেশন ড্রাইভার, ইউআরটি / সাধারণ সিরিয়াল ড্রাইভারগুলির ব্যবহার বিঘ্ন এবং ছোট আই / ও বাফারগুলির জন্য হতে পারে। আরও কয়েকটি থাকতে পারে - যেমন EEPROM, EPROM, বা অন্যান্য I2C / SPI ডিভাইসের জন্য I2C বা SPI ড্রাইভার।

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

  3. আমার সমস্ত এইচএল চালানোর পরে, আমি তার পরে নিয়মিত টাইমার টিক পাওয়ার কোনও উপায় খুঁজে পাই। এটি সাধারণত 4 থেকে 20 এমএসের মধ্যে কোথাও হারে হয়। এটি অবশ্যই নিয়মিত হতে হবে, একটি বিঘ্নিত মধ্যে উত্পন্ন। কাউন্টারগুলির রোলওভার / ওভারফ্লো সাধারণত এটি কীভাবে করা যায় তা। বাধা হ্যান্ডলার তারপরে একটি বাইট সাইজের "semaphore" বৃদ্ধি করে। আপনার যদি প্রয়োজন হয় তবে এই মুহুর্তে আপনি পাওয়ার ম্যানেজমেন্টের সাথে চারপাশে ঝাঁকুনি করতে পারেন। সেমফোরের ধারণাটি হল এর মান> 0 হলে আপনার "প্রধান লুপ" চালানো দরকার।

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

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

উপরোক্ত পদ্ধতির সাহায্যে সহজেই প্রসারিত করা যায় যাতে আপনার যোগাযোগের স্ট্যাকের মতো জিনিস থাকতে পারে যা সংযোজনীয়ভাবে চালানো হয় এবং কমস বার্তাগুলি অ্যাপ্লিকেশনগুলিতে পৌঁছে দেওয়া যায় (আপনি "আরএক্স_মেসেজ_হ্যান্ডলার" এর প্রতিটিটিতে একটি নতুন ফাংশন যুক্ত করেন এবং আপনি কোনও বার্তা প্রেরণকারী লিখেন যা চিত্রগুলি কোন আবেদন পাঠাতে হবে) out

এই পদ্ধতির আপনার নামকরণের যে কোনও যোগাযোগ ব্যবস্থার জন্য যথেষ্ট কাজ করে - এটি বহু মালিকানাধীন সিস্টেম, ওপেন স্ট্যান্ডার্ড কমস সিস্টেমগুলির জন্য কাজ করতে পারে (এবং এটি করেছে) এটি টিসিপি / আইপি স্ট্যাকের জন্যও কাজ করে।

এটির সাথে সংজ্ঞায়িত ইন্টারফেসগুলি সহ মডুলার টুকরাগুলিতে তৈরি হওয়ার সুবিধাও রয়েছে। আপনি যে কোনও সময় টুকরো টুকরো টানতে পারেন এবং বিভিন্ন টুকরো স্থানে রাখতে পারেন। প্রতিটি পয়েন্টে আপনি পরীক্ষার জোতা বা হ্যান্ডলারগুলি যুক্ত করতে পারেন যা পরিচিত ভাল নিম্ন স্তরগুলির উপর ভিত্তি করে তৈরি করে (নীচের জিনিসগুলি)। আমি দেখেছি যে প্রায় 30% থেকে 50% কোনও ডিজাইনের বিশেষত লিখিত ইউনিট পরীক্ষাগুলি যা সাধারণত মোটামুটি সহজেই যুক্ত হয় তা যুক্ত করে উপকৃত হতে পারে।

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

উপরের বর্ণনাটি এমন কিছু যা আমি এম্বেড থাকা প্ল্যাটফর্মগুলিতে কীভাবে করি তার পক্ষে অনন্য নয় - আমি বহু বাণিজ্যিক সংস্থায় এসেছি যা একই কাজ করে। এর কাজটি সাধারণত বাস্তবায়নে সম্পূর্ণ ভিন্ন তবে নীতিগুলি প্রায়শই একই রকম হয়।

আমি আশা করি উপরেরটি কিছুটা স্বাদ দেয় ... এই পদ্ধতিটি ছোট এমবেডেড সিস্টেমগুলির জন্য কাজ করে যা 100 কে বা আরও সোর্স লাইনের দানবগুলিতে স্থায়ীভাবে চালিত দানবগুলিতে আক্রমণাত্মক ব্যাটারি পরিচালনার সাহায্যে কয়েক কেবিতে চালিত হয়। আপনি যদি উইন্ডোজ সিই বা এর মতো কোনও বড় ওএসে "এম্বেডড" চালনা করেন তবে উপরের সমস্তগুলি সম্পূর্ণ অপ্রতিরোধ্য। তবে এটি বাস্তব এম্বেড প্রোগ্রামিং নয়, যাইহোক।


2
বেশিরভাগ হার্ডওয়্যার পেরিফেরালগুলি আপনি ইউআআআআআআরটির মাধ্যমে পরীক্ষা করতে পারবেন না, কারণ বেশিরভাগ সময় আপনি প্রধানত সময় নির্ধারণের বৈশিষ্ট্যে আগ্রহী হন। আপনি যদি কোনও এডিসির নমুনা হার, একটি পিডাব্লুএম ডিউটি ​​চক্র, অন্য কোনও সিরিয়াল পেরিফেরিয়াল (এসপিআই, সিএন ইত্যাদি) এর আচরণ, বা কেবল আপনার প্রোগ্রামের কিছু অংশের নির্বাহের সময় পরীক্ষা করতে চান তবে আপনি এটির মাধ্যমে এটি করতে পারবেন না UART। যে কোনও গুরুতর এম্বেড এম্বেড ফার্মওয়্যার পরীক্ষার একটি অসিলোস্কোপ অন্তর্ভুক্ত - আপনি একটি ছাড়া এমবেডেড সিস্টেম প্রোগ্রাম করতে পারবেন না।

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

2

একাধিক প্ল্যাটফর্মের জন্য ক্রমবর্ধমান বিকাশের দীর্ঘতর ইতিহাস এবং অপ্টিমাইজেশনের কোড রয়েছে এমন উদাহরণগুলি যেমন আপনি বাছাই করেছেন সাধারণত পড়া শক্ত হয়।

সি সম্পর্কিত বিষয়টি হ'ল এটি এপিআই সমৃদ্ধি এবং হার্ডওয়্যার কর্মক্ষমতা (এবং এর অভাব) এর বিস্তৃত পরিসরে প্ল্যাটফর্মগুলি ছড়িয়ে দিতে সক্ষম। ম্যাকভিম আজ একটি সাধারণ স্মার্টফোনের তুলনায় 1000X কম মেমরি এবং প্রসেসরের কর্মক্ষমতা সহ মেশিনগুলিতে প্রতিক্রিয়াশীলভাবে ছুটেছিল। আপনার রুবি কোড করতে পারেন? আপনি যে পরিপক্ক সি উদাহরণ বেছে নিয়েছেন তার চেয়ে এটি সহজ দেখাচ্ছে বলে এটি অন্যতম কারণ।


2

আমি একজন সি প্রোগ্রামার হিসাবে সর্বশেষ 9 বছর অতিবাহিত করার বিপরীত অবস্থানে আছি এবং সাম্প্রতিককালে রেলের সামনের প্রান্তে কিছু রুবি নিয়ে কাজ করছি।

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

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

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

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

সি যখন জটিল হয়ে যায় সেই সময়গুলি প্রায়ই ডিভাইস ড্রাইভার এবং ওএস কার্নেলগুলির মতো কাজ করে যা মূলত খুব নিম্ন স্তরের are আপনি যখন একটি উচ্চ স্তরের সিস্টেম লিখছেন, আপনি সি এর উচ্চ স্তরের বৈশিষ্ট্যগুলিও ব্যবহার করতে পারেন এবং নিম্ন স্তরের জটিলতা এড়াতে পারেন।

একটি খুব আকর্ষণীয় বিষয় যা আপনি দেখতে চাইতে পারেন তা হ'ল রুবির সি সোর্স কোড। রুবি এপিআই ডক্সে (http://www.ruby-doc.org/core-1.9.3/) আপনি বিভিন্ন পদ্ধতির সোর্স কোডটি ক্লিক করে দেখতে পারেন। মজার বিষয় হ'ল এই কোডটি বেশ সুন্দর এবং মার্জিত দেখাচ্ছে - এটি আপনার কল্পনা মতো জটিল দেখায় না।


" ... আপনি সি এর উচ্চ স্তরের বৈশিষ্ট্যগুলিও ব্যবহার করতে পারেন ... " যেমন রয়েছে? ;-)
এক্কে

আমি বিট ম্যানিপুলেশন এবং পয়েন্টার থেকে পয়েন্টার উইজার্ড্রির চেয়ে উচ্চ স্তরের বলতে চাইছি যা আপনি ডিভাইস ড্রাইভার টাইপ কোডে দেখতে চান না! এবং যদি আপনি বেশ কয়েকটি ফাংশন কলগুলির ওভারহেড সম্পর্কে উদ্বিগ্ন না হন তবে আপনি সি কোডটি করতে পারেন যা সত্যিই যুক্তিসঙ্গতভাবে উচ্চ স্তরের দেখাচ্ছে।
asc99c

" ... আপনি সি কোড তৈরি করতে পারেন যা সত্যিই যুক্তিসঙ্গতভাবে উচ্চ স্তরের দেখায়। ", নিরঙ্কুশভাবে, আমি এতে পুরোপুরি সম্মত। তবে " ... উচ্চ স্তরের বৈশিষ্ট্যগুলি ... " সি এর নয়, তবে আপনার মাথায় রয়েছে, তাই না?
অলক

2

আমি যা করেছি তা হ'ল ডিভাইস নির্ভর কোডটি ডিভাইসের স্বতন্ত্র কোড থেকে আলাদা করা, তারপরে ডিভাইসটির স্বতন্ত্র কোডটি পরীক্ষা করা। ভাল মডুলারালিটি এবং শৃঙ্খলা সহ, আপনি বেশিরভাগ ভাল-পরীক্ষিত কোডবেস দিয়ে সরিয়ে রাখবেন।


2

না পারার কোনও কারণ নেই। সমস্যাটি হ'ল অন্য ধরণের বিকাশে আপনার মতো সুন্দর "অফ-দ্য শেল্ফ" ইউনিট টেস্টিং ফ্রেমওয়ার্কগুলি নাও থাকতে পারে। ঠিক আছে. এর ঠিক অর্থ হল যে আপনাকে পরীক্ষার জন্য "রোল-আপনার নিজের" দৃষ্টিভঙ্গি নিতে হবে।

উদাহরণস্বরূপ আপনাকে আপনার এ / ডি রূপান্তরকারীগুলির জন্য "জাল ইনপুট" তৈরি করতে প্রোগ্রামিং উপকরণ থাকতে হতে পারে বা আপনার এম্বেড থাকা ডিভাইসের প্রতিক্রিয়া জানাতে আপনাকে "জাল তথ্য" একটি স্ট্রিম তৈরি করতে হবে।

যদি আপনি "টিডিডি" শব্দটি ব্যবহার করার বিরুদ্ধে প্রতিরোধের মুখোমুখি হন তবে এটিকে "ডিভিটি" (ডিজাইনের যাচাইকরণ পরীক্ষা) বলুন যা EE এর সাথে ধারণাটি আরও স্বাচ্ছন্দ্যময় করবে।


0

এম্বেড থাকা ডিভাইসে বা ড্রাইভার বা কাস্টম বুটলোডার ইত্যাদির মতো জিনিসগুলি বিকাশ করার সময় কি টিডিডি করা সম্ভব?

কিছুকাল আগে আমার একটি এআরএম সিপিইউয়ের জন্য প্রথম স্তরের বুটলোডার লেখার দরকার ছিল। আসলে এই ছেলেরা এই সিপিইউ বিক্রি করে। এবং আমরা একটি স্কিম ব্যবহার করেছি যেখানে তাদের বুটলোডারটি আমাদের বুটলোডারকে বুট করে। তবে এটি ধীর ছিল, যেহেতু আমাদের দুটিটির পরিবর্তে দুটি ফাইলকে NOR ফ্ল্যাশে ফ্ল্যাশ করা দরকার, আমাদের বুটলোডারটির আকারটি প্রথম বুটলোডার হিসাবে তৈরি করা দরকার ছিল এবং প্রতিবার যখন আমরা আমাদের বুটলোডার পরিবর্তন করেছিলাম তখন এটি পুনরায় তৈরি করতে হবে।

সুতরাং আমি তাদের বুটলোডারের ফাংশনগুলিকে আমাদের মধ্যে সংহত করার সিদ্ধান্ত নিয়েছি। কারণ এটি বাণিজ্যিক কোড ছিল, আমাকে নিশ্চিত করতে হয়েছিল যে সমস্ত জিনিস প্রত্যাশার মতো কাজ করেছে। তাই আমি পরিবর্তিত ও QEMU CPU -এর আইপি ব্লক অনুকরণ (সব, শুধুমাত্র ঐ যে বুট-লোডার স্পর্শ), এবং রেজিস্টার করতে "printf," এ সব পঠন / লিখন ও QEMU কোড যোগ করে PLL, UART, র্যাম নিয়ামক মত নিয়ন্ত্রণ কাপড় এবং শীঘ্রই. তারপরে আমি এই সিপিইউ সমর্থন করতে আমাদের বুটলোডারকে আপগ্রেড করেছি এবং তার পরে আমাদের বুটলোডার এবং তাদের এমুলেটরটিতে যে আউটপুট দেয় তা তুলনা করে, এটি আমাকে বেশ কয়েকটি বাগ ধরতে সহায়তা করে। এটি আংশিক সি তে এআরএম এসেম্বার্লারে লেখা হয়েছিল, এছাড়াও এর পরে সংশোধিত কিউইএমইউ আমাকে একটি বাগ ধরতে সাহায্য করেছিল, আমি জেটিএইচ এবং একটি সত্যিকারের এআরএম সিপিইউ ব্যবহার করে ধরতে পারি না।

এমনকি সি এবং এসেম্বলারের সাথেও আপনি পরীক্ষাগুলি ব্যবহার করতে পারেন।


-2

হ্যাঁ এম্বেড থাকা সফ্টওয়্যারটিতে টিডিডি করা সম্ভব। যে লোকেরা এটি বলছে তারা সম্ভব নয়, প্রাসঙ্গিক নয় বা প্রযোজ্য নয় সঠিক নয়। যে কোনও সফ্টওয়্যারের মতো এম্বেড করে টিডিডি থেকে নেওয়া গুরুতর মান।

এটি করার সর্বোত্তম উপায় হ'ল আপনার পরীক্ষাগুলি লক্ষ্যমাত্রায় চালানো নয় বরং আপনার হার্ডওয়্যার নির্ভরতা বিমূর্ত করা এবং আপনার হোস্ট পিসিতে সংকলন এবং চালানো।

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

সি এর জন্য এখনই সেরা বিকল্প সিলডিং। আমি এটি সম্পর্কে লিখেছিলাম একটি পোস্ট এখানে:

http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-ceedling

এবং এটি রুবিতে নির্মিত! এটি ব্যবহার করার জন্য আপনার কোনও রুবি জানতে হবে না।


উত্তরগুলি নিজেরাই দাঁড়াবে বলে আশা করা হচ্ছে। স্ট্যাক এক্সচেঞ্জে ("নিবন্ধটি পড়ুন বা সিলডিং পরীক্ষা করুন") পদার্থগুলি খুঁজে পেতে পাঠকদের বাহ্যিক উত্সে যেতে বাধ্য করা হচ্ছে। বিবেচনা করুন সম্পাদন করা এটা হইয়া সাইটের মান নিয়ম করতে ing
মশা

সিডলিংয়ের কি অ্যাসিক্রোনাস ইভেন্টগুলিকে সমর্থন করার জন্য কোনও ব্যবস্থা আছে? রিয়েল-টাইম এম্বেডেড অ্যাপ্লিকেশনগুলির অন্যতম চ্যালেঞ্জপূর্ণ দিক হ'ল তারা মডেল করাতে খুব জটিল সিস্টেমগুলির কাছ থেকে ইনপুট গ্রহণের সাথে মোকাবিলা করে ...
জে এলস্টন

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