मैं एम्बेडेड उपकरणों पर TDD कैसे करूं?


17

मैं प्रोग्रामिंग के लिए नया नहीं हूं और मैंने AVR पर कुछ निम्न स्तर के C और ASM के साथ भी काम किया है, लेकिन मैं वास्तव में अपने सिर को बड़े पैमाने पर एम्बेडेड सी परियोजना के आसपास नहीं प्राप्त कर सकता हूं।

टीडीडी / बीडीडी के रूबी के दर्शन से पतित होने के कारण, मैं यह समझने में असमर्थ हूं कि लोग इस तरह कोड कैसे लिखते हैं और परीक्षण करते हैं। मैं यह नहीं कह रहा हूं कि यह एक बुरा कोड है, मुझे समझ नहीं आता कि यह कैसे काम कर सकता है।

मैं कुछ निम्न स्तर की प्रोग्रामिंग में और अधिक प्राप्त करना चाहता था, लेकिन मुझे वास्तव में यह पता नहीं है कि इस से कैसे संपर्क किया जाए, क्योंकि यह पूरी तरह से अलग मानसिकता की तरह दिखता है जिसका मैं उपयोग कर रहा हूं। मुझे सूचक अंकगणित को समझने में परेशानी नहीं होती है, या स्मृति कार्यों को कैसे आवंटित किया जाता है, लेकिन जब मैं देखता हूं कि रूबी की तुलना में जटिल सी / सी ++ कोड कैसा दिखता है, तो यह असंभव रूप से कठिन लगता है।

चूँकि मैंने पहले से ही अपने आप को एक Arduino बोर्ड का आदेश दिया था, इसलिए मैं कुछ निम्न स्तर C में प्राप्त करना पसंद करूँगा और वास्तव में समझ सकता हूँ कि चीजों को कैसे ठीक से करना है, लेकिन ऐसा लगता है कि उच्च स्तर की भाषाओं में से कोई भी नियम लागू नहीं होता है।

क्या यह भी संभव है कि टीडीडी को एम्बेडेड उपकरणों पर या ड्राइवरों या कस्टम बूटलोडर जैसी चीजों को विकसित करते समय, आदि।


3
हाय डार्थ, हम वास्तव में सी के अपने डर पर काबू पाने में आपकी मदद नहीं कर सकते हैं, लेकिन एम्बेडेड उपकरणों पर टीडीडी के बारे में सवाल यहां विषय पर है: मैंने आपके प्रश्न को संशोधित करने के बजाय इसे करने की सुविधा दी है।

जवाबों:


18

सबसे पहले, आपको पता होना चाहिए कि आपने जो कोड नहीं लिखा था, उसे समझने की कोशिश खुद को लिखने से 5 गुना कठिन है। आप उत्पादन कोड को पढ़कर C सीख सकते हैं, लेकिन ऐसा करने से सीखने में अधिक समय लगता है।

टीडीडी / बीडीडी के रूबी के दर्शन से पतित होने के कारण, मैं यह समझने में असमर्थ हूं कि लोग इस तरह कोड कैसे लिखते हैं और परीक्षण करते हैं। मैं यह नहीं कह रहा हूं कि यह एक बुरा कोड है, मुझे समझ नहीं आता कि यह कैसे काम कर सकता है।

यह एक कौशल है; आप इसमें बेहतर हैं। अधिकांश सी प्रोग्रामर यह नहीं समझते हैं कि लोग रूबी का उपयोग कैसे करते हैं, लेकिन इसका मतलब यह नहीं है कि वे नहीं कर सकते।

क्या यह भी संभव है कि टीडीडी को एम्बेडेड उपकरणों पर या ड्राइवरों या कस्टम बूटलोडर जैसी चीजों को विकसित करते समय, आदि।

वैसे, इस विषय पर किताबें हैं:

यहाँ छवि विवरण दर्ज करें अगर कोई भौंरा कर सकता है, तो आप भी कर सकते हैं!

ध्यान रखें कि आमतौर पर अन्य भाषाओं से अभ्यास लागू नहीं होता है। हालांकि TDD बहुत सार्वभौमिक है।


2
अपने हर एम्बेडेड सिस्टम के लिए मैंने जो भी TDD देखे हैं, उनमें केवल उन प्रणालियों में त्रुटियां पाई गईं, जिन्हें मैं अपने दम पर आसानी से मिल सकने वाली त्रुटियों को हल करने में आसान था। उन्होंने कभी नहीं पाया कि मुझे क्या मदद चाहिए, समय अन्य चिप्स के साथ निर्भरता और अंतःक्रियाओं पर निर्भर करता है।
कोर्तुक

3
यह इस बात पर निर्भर करता है कि आप किस तरह की प्रणाली पर काम कर रहे हैं। मैंने पाया है कि सॉफ्टवेयर का परीक्षण करने के लिए TDD का उपयोग करना, अच्छे हार्डवेयर अमूर्तता के साथ मिलकर, वास्तव में मुझे उन समयों पर निर्भरता को और अधिक आसानी से मॉक अप करने की अनुमति देता है। अन्य लाभ जो लोग अक्सर देखते हैं वह यह है कि परीक्षण, स्वचालित होने पर, किसी भी समय चलाए जा सकते हैं और यह सुनिश्चित करने के लिए कि लॉजिक एनालाइज़र के साथ डिवाइस पर किसी को बैठने की आवश्यकता न हो, ताकि सॉफ्टवेयर काम कर सके। TDD ने मुझे मेरे वर्तमान प्रोजेक्ट में अकेले डिबगिंग के हफ्तों को बचाया है। अक्सर, यह त्रुटियां हैं जो हम सोचते हैं कि उन त्रुटियों के लिए हाजिर होना आसान है जो हम उम्मीद नहीं करेंगे।
निक पास्कुची

इसके अलावा यह विकास और परीक्षण बंद लक्ष्य की अनुमति देता है।
cp.engr

क्या मैं गैर-एंबेडेड सी के लिए टीडीडी को समझने के लिए इस पुस्तक का अनुसरण कर सकता हूं ? किसी भी उपयोगकर्ता अंतरिक्ष सी प्रोग्रामिंग के लिए?
ओवरएक्सचेंज

15

यहाँ जवाबों की एक विशाल विविधता ... विभिन्न तरीकों से इस मुद्दे को संबोधित करते हुए।

मैं 25 वर्षों से विभिन्न भाषाओं में एम्बेडेड लेवल सॉफ्टवेयर और फर्मवेयर लिख रहा हूं - ज्यादातर सी (लेकिन Ada, Occam2, PL / M, और रास्ते में कई कोडांतरक में विविधता के साथ)।

विचार और परीक्षण और त्रुटि की एक लंबी अवधि के बाद, मैं एक ऐसी विधि में बस गया हूं, जिसके परिणाम काफी जल्दी मिलते हैं और टेस्ट रैपर और हार्नेस बनाने में काफी आसान है (जहां वे ADD VALUE!)

विधि कुछ इस तरह है:

  1. प्रत्येक प्रमुख परिधीय के लिए एक ड्राइवर या हार्डवेयर अमूर्त कोड इकाई लिखें जिसे आप उपयोग करना चाहते हैं। प्रोसेसर को इनिशियलाइज़ करने के लिए एक लिखें और सब कुछ सेट अप करें (यह अनुकूल वातावरण बनाता है)। आमतौर पर छोटे एम्बेडेड प्रोसेसर पर - आपका AVR एक उदाहरण है - 10 - 20 ऐसी इकाइयाँ हो सकती हैं, जो सभी छोटी हों। ये इनिशियलाइज़ होने के लिए इकाइयाँ हो सकती हैं, ए / डी कन्वर्सेन टू अनसक्लेस्ड मेमोरी बफ़र्स, बिटवाइज़ आउटपुट, पुशबटन इनपुट (नो डेब्यूज़ सिम्पल), पल्स चौड़ाई मॉड्यूलेशन ड्राइवर्स, UART / सिंपल सीरीयल ड्राइवर्स यूज़ इंटरप्ट और छोटे / O बफ़र्स। कुछ और हो सकते हैं - जैसे EEPROM, EPROM, या अन्य I2C / SPI उपकरणों के लिए I2C या SPI ड्राइवर।

  2. हार्डवेयर एब्स्ट्रैक्शन (एचएएल) / चालक इकाइयों में से प्रत्येक के लिए, मैं फिर एक परीक्षण कार्यक्रम लिखता हूं। यह एक सीरियल पोर्ट (UART) और प्रोसेसर इनिट पर निर्भर करता है - इसलिए पहला परीक्षण कार्यक्रम केवल उन 2 इकाइयों का उपयोग करता है और बस कुछ बुनियादी इनपुट और आउटपुट करता है। इससे मुझे यह पता चलता है कि मैं प्रोसेसर शुरू कर सकता हूं और मेरे पास बेसिक डिबग सपोर्ट सीरियल I / O काम कर रहा है। एक बार जब वह काम करता है (और उसके बाद ही) मैं तब अन्य एचएएल परीक्षण कार्यक्रमों को विकसित करता हूं, जो उन्हें ज्ञात अच्छी यूएआरटी और आईएनआईटी इकाइयों के शीर्ष पर बनाते हैं। इसलिए मेरे पास अपने सीरियल डिबग टर्मिनल पर बिटवाइज़ इनपुट पढ़ने और एक अच्छे रूप (हेक्स, दशमलव, जो भी हो) को प्रदर्शित करने के लिए परीक्षण कार्यक्रम हो सकते हैं। मैं तब EEPROM या EPROM परीक्षण कार्यक्रमों की तरह बड़ी और अधिक जटिल चीजों में स्थानांतरित कर सकता हूं - मैं इनमें से अधिकांश मेनू को संचालित करता हूं इसलिए मैं चलाने, इसे चलाने और परिणाम देखने के लिए एक परीक्षण का चयन कर सकता हूं। मैं इसे SCRIPT नहीं कर सकता लेकिन आमतौर पर मैं डॉन '

  3. एक बार जब मैं अपने सभी एचएएल चला रहा होता हूं, तो मैं एक नियमित टाइमर टिक पाने का तरीका ढूंढता हूं। यह आमतौर पर 4 और 20 एमएस के बीच कहीं दर पर होता है। यह एक बाधा में उत्पन्न, नियमित होना चाहिए। काउंटरों के रोलओवर / ओवरफ्लो आमतौर पर यह कैसे किया जा सकता है। तब बाधा हैंडलर एक बाइट आकार "सेमीफोर" में शामिल हो जाता है। यदि आप की जरूरत है तो इस बिंदु पर आप पावर मैनेजमेंट के साथ भी फील कर सकते हैं। सेमाफोर का विचार यह है कि यदि इसका मान> 0 है तो आपको "मुख्य लूप" चलाने की आवश्यकता है।

  4. EXECUTIVE मुख्य लूप चलाता है। यह बहुत अधिक इंतजार करता है कि गैर-0 बनने के लिए उस सेमाफोर पर (मैं इस विवरण को दूर कर दूं)। इस बिंदु पर, आप इन टिकों को गिनने के लिए काउंटरों के साथ खेल सकते हैं (क्योंकि आपको टिक दर पता है) और इसलिए आप झंडे सेट कर सकते हैं यदि वर्तमान कार्यकारी टिक 1 सेकंड, 1 मिनट के अंतराल के लिए है, और अन्य सामान्य अंतराल आप उपयोग करने के लिए चाहते हो सकता है। एक बार कार्यकारी को पता चल जाता है कि सेमीफोर> 0 है, यह हर "एप्लिकेशन" प्रक्रियाओं "अपडेट" फ़ंक्शन के माध्यम से एक सिंगल पास चलाता है।

  5. आवेदन प्रक्रियाएं प्रभावी रूप से एक दूसरे के साथ बैठती हैं और "अपडेट" टिक द्वारा नियमित रूप से चलती हैं। यह केवल एक फ़ंक्शन है जिसे कार्यकारी द्वारा बुलाया जाता है। यह एक बहुत ही सरल घर में विकसित RTOS के साथ प्रभावी रूप से गरीब-बहु मल्टी-टास्किंग है जो प्रवेश करने वाले सभी अनुप्रयोगों पर निर्भर करता है, थोड़ा सा काम करता है और बाहर निकलता है। अनुप्रयोगों को अपने स्वयं के राज्य चर बनाए रखने की आवश्यकता है और लंबे समय तक चलने वाली गणना नहीं कर सकते क्योंकि निष्पक्षता के लिए कोई पूर्व-खाली ऑपरेटिंग सिस्टम नहीं है। OBVIOUSLY अनुप्रयोगों के चलने का समय (संचयी रूप से) प्रमुख टिक अवधि से छोटा होना चाहिए।

उपरोक्त दृष्टिकोण को आसानी से बढ़ाया जाता है, ताकि आपके पास संचार स्टैक जैसी चीजें हो सकें जो अतुल्यकालिक रूप से चलती हैं और फिर कॉम्म्स संदेश अनुप्रयोगों तक पहुंचाए जा सकते हैं (आप प्रत्येक में एक नया फ़ंक्शन जोड़ते हैं जो "rx_message_handler" है और आप एक संदेश डिस्पैचर लिखते हैं जो आंकड़े हैं कौन से एप्लिकेशन को डिस्पैच करना है)।

यह दृष्टिकोण बहुत अधिक किसी भी संचार प्रणाली के लिए काम करता है जिसे आप नाम देते हैं - यह कई मालिकाना प्रणालियों के लिए काम कर सकता है (और कर चुका है), मानक मानकों को खोलता है, यह टीसीपी / आईपी स्टैक के लिए भी काम करता है।

इसमें अच्छी तरह से परिभाषित इंटरफेस के साथ मॉड्यूलर टुकड़ों में निर्मित होने का भी लाभ है। आप किसी भी समय टुकड़ों को अंदर और बाहर खींच सकते हैं, विभिन्न टुकड़ों को स्थानापन्न कर सकते हैं। प्रत्येक बिंदु पर जिस तरह से आप टेस्ट हार्नेस या हैंडलर जोड़ सकते हैं जो ज्ञात अच्छी निचली परत भागों (नीचे सामान) पर बनाते हैं। मैंने पाया है कि एक डिज़ाइन के लगभग 30% से 50% विशेष रूप से लिखित इकाई परीक्षणों को जोड़ने से लाभ उठा सकते हैं जो आमतौर पर काफी आसानी से जोड़े जाते हैं।

मैंने यह सब एक कदम आगे बढ़ाया है (एक विचार जो मैंने किसी और से किया है जिसने ऐसा किया है) और एचएएल परत को पीसी के बराबर के साथ बदल दें। तो उदाहरण के लिए आप C / C ++ और winforms या समान पीसी पर उपयोग कर सकते हैं और कोड CAREFULLY लिखकर आप प्रत्येक इंटरफ़ेस का अनुकरण कर सकते हैं (जैसे EEPROM = पीसी मेमोरी में पढ़ी गई डिस्क फ़ाइल) और फिर एक पीसी पर संपूर्ण एम्बेडेड एप्लिकेशन चलाएं। एक अनुकूल डिबगिंग वातावरण का उपयोग करने की क्षमता समय और प्रयास की एक बड़ी राशि बचा सकती है। केवल वास्तव में बड़ी परियोजनाएं आमतौर पर इस प्रयास को सही ठहरा सकती हैं।

उपरोक्त विवरण कुछ ऐसा है जो एम्बेडेड प्लेटफॉर्म पर चीजों को करने के लिए अद्वितीय नहीं है - मैं कई वाणिज्यिक संगठनों के साथ आया हूं जो समान हैं। जिस तरह से किया जाता है वह आमतौर पर कार्यान्वयन में काफी भिन्न होता है लेकिन सिद्धांत अक्सर समान होते हैं।

मुझे उम्मीद है कि ऊपर थोड़ा स्वाद देता है ... यह दृष्टिकोण छोटे एम्बेडेड सिस्टम के लिए काम करता है जो कि कुछ kB में आक्रामक बैटरी प्रबंधन के साथ 100K या अधिक स्रोत लाइनों के राक्षसों के माध्यम से चलता है जो स्थायी रूप से संचालित होते हैं। यदि आप विंडोज सीई या जैसे बड़े ओएस पर "एम्बेडेड" चलाते हैं, तो उपरोक्त सभी पूरी तरह से सारहीन है। लेकिन यह वास्तविक एम्बेडेड प्रोग्रामिंग नहीं है, किसी भी तरह।


2
अधिकांश हार्डवेयर बाह्य उपकरणों का आप UART के माध्यम से परीक्षण नहीं कर सकते, क्योंकि अक्सर आप मुख्य रूप से समय विशेषताओं में रुचि रखते हैं। यदि आप एक एडीसी नमूना दर, एक पीडब्लूएम शुल्क चक्र, कुछ अन्य धारावाहिक परिधीय (एसपीआई, कैन आदि) के व्यवहार की जांच करना चाहते हैं, या बस अपने कार्यक्रम के कुछ हिस्से का निष्पादन समय, तो आप ऐसा नहीं कर सकते UART। किसी भी गंभीर एम्बेडेड फर्मवेयर परीक्षण में एक आस्टसीलस्कप शामिल है - आप एक के बिना एम्बेडेड सिस्टम प्रोग्राम नहीं कर सकते।

1
अरे हाँ, बिल्कुल। मैं सिर्फ उस एक का उल्लेख करना भूल गया। लेकिन एक बार जब आप अपना यूएआरटी अप और रनिंग करते हैं, तो परीक्षण या परीक्षण मामलों को सेट करना बहुत आसान होता है (जो कि सवाल था), चीजों को उत्तेजित करें, उपयोगकर्ता इनपुट की अनुमति दें, परिणाम प्राप्त करें और अनुकूल तरीके से प्रदर्शित करें। यह + आपका CRO जीवन को बहुत आसान बनाता है।
जल्‍दी से जल्‍दी से जल्‍दी

2

कोड जिसमें वृद्धिशील विकास का एक लंबा इतिहास है और कई प्लेटफार्मों के लिए अनुकूलन, जैसे कि आपके द्वारा उठाए गए उदाहरण, आमतौर पर पढ़ना मुश्किल है।

सी के बारे में बात यह है कि यह वास्तव में एपीआई समृद्धि और हार्डवेयर प्रदर्शन (और इसके अभाव) की एक विशाल रेंज में प्लेटफार्मों को फैलाने में सक्षम है। मैकविम आज एक सामान्य स्मार्टफोन की तुलना में 1000X कम मेमोरी और प्रोसेसर के प्रदर्शन के साथ मशीनों पर जिम्मेदारी से भागा। क्या आपका रूबी कोड हो सकता है? यही कारण है कि यह आपके द्वारा चुने गए परिपक्व सी उदाहरणों की तुलना में सरल लग सकता है।


2

मैं सी प्रोग्रामर के रूप में पिछले 9 वर्षों में सबसे अधिक समय बिताने की रिवर्स स्थिति में हूं, और हाल ही में रूबी फ्रंट-एंड पर कुछ रूबी पर काम कर रहा हूं।

सी में मैं जिस चीज पर काम करता हूं वह ज्यादातर स्वचालित गोदामों को नियंत्रित करने के लिए मध्यम आकार की कस्टम प्रणाली है (मिलियन की एक जोड़ी तक कुछ हजार पाउंड की विशिष्ट लागत)। उदाहरण कार्यक्षमता एक कस्टम-इन-मेमोरी डेटाबेस है, जो कुछ छोटी प्रतिक्रिया-समय की आवश्यकताओं और वेयरहाउस वर्कफ़्लो के उच्च स्तर के प्रबंधन के साथ मशीनरी में हस्तक्षेप करता है।

मैं सबसे पहले कह सकता हूं, हम कोई TDD नहीं करते हैं। मैंने कई बार इकाई परीक्षणों की शुरुआत करने की कोशिश की है, लेकिन C में यह कस्टमाइज सॉफ्टवेयर विकसित करते समय कम-से-कम अधिक परेशानी वाली है। लेकिन मैं कहूंगा कि टीडीडी को रूबी की तुलना में सी में बहुत कम जरूरत है। मुख्य रूप से, ऐसा इसलिए है क्योंकि C को संकलित किया गया है, और यदि यह बिना किसी चेतावनी के संकलित करता है, तो आप पहले से ही रेल्स में rspec ऑटो-जनरेटेड मचान परीक्षण के लिए एक समान परीक्षण कर चुके हैं। यूनिट परीक्षणों के बिना रूबी संभव नहीं है।

लेकिन मैं क्या कहूंगा कि C को उतना कठिन नहीं होना चाहिए जितना कि कुछ लोग बनाते हैं। C मानक लाइब्रेरी में से अधिकांश अयोग्य फ़ंक्शन नामों की गड़बड़ी है और बहुत सारे C प्रोग्राम इस सम्मेलन का अनुसरण करते हैं। मुझे खुशी है कि हम ऐसा नहीं करते हैं, और वास्तव में मानक पुस्तकालय कार्यक्षमता (ST_Copy के बजाय strncpy, ST_PatternMatch के बजाय regcomp / regexec, CHARSET_Con के बजाय iconv_open / iconv_close और इतने पर) के लिए बहुत सारे रैपर हैं। हमारा इन-हाउस सी कोड मेरे द्वारा पढ़े गए अन्य सामानों की तुलना में मेरे लिए बेहतर है।

लेकिन जब आप कहते हैं कि अन्य उच्च स्तरीय भाषाओं के नियम लागू नहीं होते हैं, तो मैं असहमत होऊंगा। बहुत सारे अच्छे C कोड 'ऑब्जेक्ट ओरिएंटेड' लगते हैं। आप अक्सर संसाधन को हैंडल करने के लिए एक पैटर्न देखते हैं, कुछ कार्यों को पास करने को तर्क के रूप में बुलाते हैं, और अंततः संसाधन को जारी करते हैं। दरअसल, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के डिजाइन सिद्धांत काफी हद तक उन अच्छी चीजों से आए हैं जो लोग प्रक्रियात्मक भाषाओं में कर रहे थे।

जब सी वास्तव में जटिल हो जाता है तो अक्सर डिवाइस ड्राइवर और ओएस कर्नेल जैसी चीजें करते हैं जो मूल रूप से बहुत कम स्तर के होते हैं। जब आप उच्च स्तरीय प्रणाली लिख रहे होते हैं, तो आप C की उच्च स्तरीय विशेषताओं का भी उपयोग कर सकते हैं और निम्न स्तर की जटिलता से बच सकते हैं।

एक बहुत ही दिलचस्प बात आप रूबी के लिए सी सोर्स-कोड के माध्यम से देख सकते हैं। रूबी एपीआई डॉक्स (http://www.ruby-doc.org/core-1.9.3/) में आप विभिन्न तरीकों के लिए स्रोत कोड पर क्लिक और देख सकते हैं। दिलचस्प बात यह है कि यह कोड काफी अच्छा और सुरुचिपूर्ण दिखता है - यह उतना जटिल नहीं दिखता जितना आप कल्पना कर सकते हैं।


" ... आप सी के उच्च स्तर की विशेषताओं का भी उपयोग कर सकते हैं ... ", जैसे हैं? ;-)
एल्क

मेरा मतलब है कि डिवाइस ड्राइवर टाइप कोड में आपको देखने के लिए बिटकॉइन और पॉइंटर से पॉइंटर वीज़री की तुलना में उच्च स्तर है! और अगर आप फ़ंक्शन कॉल के एक जोड़े के ओवरहेड के बारे में चिंतित नहीं हैं, तो आप सी कोड बना सकते हैं जो वास्तव में काफी उच्च स्तर का दिखता है।
asc99c

" ... आप सी कोड बना सकते हैं जो वास्तव में काफी उच्च स्तर का दिखता है। ", पूरी तरह से, मैं इसके लिए पूरी तरह से सहमत हूं। लेकिन हालांकि " ... उच्च स्तर की विशेषताएं ... " सी की नहीं हैं, लेकिन आपके सिर में हैं, वे नहीं हैं?
एल्क

2

मैंने जो किया है, वह डिवाइस इंडिपेंडेंट कोड से डिवाइस डिपेंडेंट कोड को अलग करता है, फिर डिवाइस इंडिपेंडेंट कोड को टेस्ट करता है। अच्छे प्रतिरूपता और अनुशासन के साथ, आप ज्यादातर अच्छी तरह से परीक्षण किए गए कोडबेस के साथ हवा करेंगे ।


2

कोई कारण नहीं है कि तुम क्यों नहीं कर सकते। समस्या यह है कि आपके पास अन्य प्रकार के विकास में अच्छा "ऑफ-द-शेल्फ" यूनिट परीक्षण ढांचे नहीं हो सकते हैं। ठीक है। इसका मतलब सिर्फ इतना है कि आपको परीक्षण के लिए "रोल-योर-ओन" दृष्टिकोण लेना होगा।

उदाहरण के लिए आपको अपने ए / डी कन्वर्टर्स के लिए "नकली इनपुट" का उत्पादन करने के लिए इंस्ट्रूमेंटेशन प्रोग्राम करना पड़ सकता है या शायद आपको जवाब देने के लिए अपने एम्बेडेड डिवाइस के लिए "नकली डेटा" की एक धारा उत्पन्न करनी होगी।

यदि आप शब्द "टीडीडी" का उपयोग करने के लिए प्रतिरोध का सामना करते हैं, तो इसे "डीवीटी" (डिजाइन सत्यापन परीक्षण) कहते हैं जो विचार के साथ ईई को और अधिक आरामदायक बना देगा।


0

क्या यह भी संभव है कि टीडीडी को एम्बेडेड उपकरणों पर या ड्राइवरों या कस्टम बूटलोडर जैसी चीजों को विकसित करते समय, आदि।

कुछ समय पहले मुझे एआरएम सीपीयू के लिए पहले स्तर के बूटलोडर लिखने की आवश्यकता थी। दरअसल इस CPU को बेचने वालों में से एक है। और हमने एक योजना का उपयोग किया जहां उनके बूटलोडर हमारे बूटलोडर को बूट करते हैं। लेकिन यह धीमा था, क्योंकि हमें एक के बजाय दो फाइलों को NOR फ्लैश में फ्लैश करने की जरूरत थी, हमें अपने बूटलोडर के आकार को पहले बूटलोडर में बनाने की जरूरत थी, और हर बार जब हमने अपना बूटलोडर वगैरह बदला तो उसे दोबारा बनाने की जरूरत थी।

इसलिए मैंने उनके बूटलोडर के कार्यों को हमारे में एकीकृत करने का निर्णय लिया। क्योंकि यह वाणिज्यिक कोड था, इसलिए मुझे यह सुनिश्चित करना था कि सभी चीजें उम्मीद के मुताबिक काम करें। इसलिए मैंने QEMU को उस CPU के IP ब्लॉक्स का अनुकरण करने के लिए संशोधित किया (सभी नहीं, केवल जो बूटलोडर को छूते हैं), और QEMU को "प्रिंटफ़" में कोड जोड़कर सभी रीड / रजिस्टर को लिखता है जो PLL, UART, SRAM कंट्रोलर और जैसे कंट्रोल सामान को लिखता है जल्द ही। फिर मैंने इस सीपीयू का समर्थन करने के लिए हमारे बूटलोडर को अपग्रेड किया, और उसके बाद आउटपुट की तुलना में जो हमारे बूटलोडर और उनके एमुलेटर पर देते हैं, इससे मुझे कई बग पकड़ने में मदद मिलती है। यह आंशिक रूप से एआरएम असेंबलर में लिखा गया था, आंशिक रूप से सी में। इसके बाद संशोधित क्यूईएमयू ने मुझे एक बग को पकड़ने में मदद की, कि मैं जेटीएजी और एक वास्तविक एआरएम सीपीयू का उपयोग करके नहीं पकड़ सका।

तो सी और कोडांतरक के साथ भी आप परीक्षणों का उपयोग कर सकते हैं।


-2

हाँ एम्बेडेड सॉफ्टवेयर पर टीडीडी करना संभव है। यह बताने वाले लोग संभव नहीं हैं, प्रासंगिक नहीं हैं या लागू नहीं हैं, यह सही नहीं है। किसी भी सॉफ्टवेयर के साथ एम्बेडेड में टीडीडी से प्राप्त किया जाने वाला गंभीर मूल्य है।

वे इसे करने का सबसे अच्छा तरीका है, हालांकि यह आपके परीक्षणों को लक्ष्य पर चलाने के लिए नहीं है बल्कि आपके हार्डवेयर निर्भरता को संकलित करने के लिए है और आपके होस्ट पीसी पर चलाने के लिए है।

जब आप टीडीडी कर रहे हैं, तो आप बहुत सारे परीक्षण बना रहे हैं और चला रहे हैं। ऐसा करने में आपकी सहायता के लिए आपको सॉफ़्टवेयर की आवश्यकता है। आप एक परीक्षण ढाँचा चाहते हैं जो स्वचालित परीक्षण खोज और मॉक जनरेशन के साथ इसे त्वरित और आसान बना दे।

C के लिए अभी सबसे अच्छा विकल्प Ceedling है। यहाँ एक पोस्ट है जिसके बारे में मैंने लिखा है:

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

और यह रूबी में बनाया गया है! हालांकि आपको इसे उपयोग करने के लिए किसी भी रूबी को जानने की आवश्यकता नहीं है ।


उत्तर अपने दम पर खड़े होने की उम्मीद है। बाहरी संसाधनों को प्राप्त करने के लिए पाठकों को मजबूर करने के लिए पदार्थ को स्टैक एक्सचेंज ("लेख पढ़ें या Ceedling की जाँच करें") पर फेंक दिया जाता है। यह विचार करने के लिए संपादित करें कि यह साइट की गुणवत्ता के मानदंडों को पूरा करने के लिए
gnat

क्या Ceedling में अतुल्यकालिक घटनाओं का समर्थन करने के लिए कोई तंत्र है? वास्तविक समय के एम्बेडेड अनुप्रयोगों में से एक अधिक चुनौतीपूर्ण पहलू यह है कि वे बहुत जटिल प्रणालियों से इनपुट प्राप्त करने से निपटते हैं जो स्वयं को मॉडल करना मुश्किल है ...
जे एलस्टन

@ जय इसका समर्थन करने के लिए विशेष रूप से कुछ भी नहीं है। हालाँकि मैंने सफलता परीक्षण किया है कि इस तरह की चीज़ों का मज़ाक उड़ाया जाता है, और इसका समर्थन करने के लिए एक वास्तुकला की स्थापना की जाती है। उदाहरण के लिए, मैंने हाल ही में एक परियोजना पर काम किया है, जहां बाधित-संचालित घटनाओं को एक कतार में रखा गया था और फिर "इवेंट हैंडलर" राज्य मशीन में खपत किया गया था। यह अनिवार्य रूप से केवल एक फ़ंक्शन था जिसे जब भी कोई घटना होती है, तब कहा जाता था। उस फ़ंक्शन का परीक्षण करते समय, मैं फ़ंक्शन कॉल को मॉक कर सकता हूं, जो घटनाओं को कतार से बाहर खींचता है, और इसलिए सिस्टम में होने वाली किसी भी घटना का अनुकरण कर सकता है। टेस्ट ड्राइविंग यहाँ भी मदद करता है।
चेरनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.