एंबेडेड सॉफ्टवेयर बहुत अलग है।
एक डेस्कटॉप ऐप पर, एब्सट्रैक्शन और लाइब्रेरी आपको विकास के बहुत से समय बचाते हैं। आपके पास एक समस्या पर एक और युगल मेगाबाइट या गीगाबाइट रैम या कुछ 2 + गीगाहर्ट्ज 64-बिट सीपीयू कोर को फेंकने की लक्जरी है, और कोई और (उपयोगकर्ता) उस हार्डवेयर के लिए भुगतान कर रहा है। आप नहीं जानते होंगे कि ऐप किस सिस्टम पर चलेगा।
एक एम्बेडेड परियोजना में, संसाधन अक्सर बहुत सीमित होते हैं। एक परियोजना में मैंने (PIC 17X-Series प्रोसेसर पर) काम किया था, हार्डवेयर में प्रोग्राम मेमोरी के 2Kwords, 8-लेवल (इन-हार्डवेयर) स्टैक और 192 बाइट्स (<0.2kB) रैम थे। विभिन्न I / O पिन में अलग-अलग क्षमताएं थीं और आपने हार्डवेयर को हार्डवेयर रजिस्टरों में लिखकर आवश्यकतानुसार कॉन्फ़िगर किया था। डीबगिंग में एक आस्टसीलस्कप और तर्क-विश्लेषक शामिल हैं।
एम्बेडेड में, सार अक्सर रास्ते में मिलता है और आपके पास नहीं होने वाले संसाधनों (और लागत) का प्रबंधन करेगा। उदाहरण के लिए अधिकांश एम्बेडेड सिस्टम में कोई फ़ाइल सिस्टम नहीं है। माइक्रोवेव ओवन एम्बेडेड सिस्टम हैं। कार इंजन नियंत्रक। कुछ इलेक्ट्रिक टूथब्रश। कुछ शोर-रद्द करने वाले हेडफ़ोन।
एम्बेडेड सिस्टम को विकसित करने में मेरे लिए एक बहुत ही महत्वपूर्ण कारक यह है कि निर्देश, संसाधनों, स्मृति और निष्पादन समय के संदर्भ में कोड का अनुवाद क्या है, इसे जानना और नियंत्रित करना। अक्सर निर्देशों का सटीक अनुक्रम हार्डवेयर इंटरफ़ेस तरंगों के लिए समय नियंत्रण को नियंत्रित करता है।
सार और पीछे के दृश्य 'जादू' (उदाहरण के लिए एक कचरा-संग्राहक) डेस्कटॉप ऐप्स के लिए बहुत अच्छा है। कचरा-संग्राहक आपको मेमोरी लीक का पीछा करते हुए बहुत समय बचाते हैं, जब मेमोरी है / गतिशील रूप से आवंटित किया जा सकता है।
हालांकि वास्तविक समय में एम्बेडेड दुनिया में हमें यह जानने और नियंत्रित करने की आवश्यकता है कि चीजों को कितनी देर तक ले जाया जाता है, कभी-कभी नैनोस्कॉन्ड्स के लिए नीचे, और एक समस्या पर एक और जोड़ी रैम या एक तेज सीपीयू नहीं फेंक सकते हैं। एक सरल उदाहरण: जब ड्यूटी चक्र को नियंत्रित करके एल ई डी के सॉफ्टवेयर को छोटा किया जाता है (सीपीयू में केवल एल ई डी का नियंत्रण होता है), तो प्रोसेसर के लिए यह ठीक नहीं है कि वह रवाना हो जाए और उदाहरण के लिए 100ms के लिए कचरा संग्रह करें क्योंकि प्रदर्शन स्पष्ट रूप से दिखाई देगा चमकीला चमकना या बाहर जाना।
एक अधिक काल्पनिक उदाहरण एक इंजन नियंत्रक है जो सीधे स्पार्क-प्लग को निकालता है। यदि वह CPU बंद हो जाता है और 50ms के लिए कचरा-संग्रह करता है, तो इंजन एक क्षण के लिए कट जाएगा या गलत क्रैंकशाफ्ट स्थिति में आग लग जाएगी, संभवतः इंजन को रोकना (गुजरते समय?) या इसे यंत्रवत् रूप से क्षतिग्रस्त करना। आप किसी को मार सकते हैं।