एंबेडेड सिस्टम प्रोग्रामिंग (जो मैं लगभग 30+ वर्षों से लगा हुआ हूं) को किसी अन्य प्रकार के सॉफ़्टवेयर विकास की तुलना में काफी अलग मानसिकता की आवश्यकता होती है। कंप्यूटिंग शक्ति की सीमा व्यापक रूप से भिन्न होती है, 8-बिट माइक्रोकंट्रोलर से, जो लिनक्स या किसी अन्य सामान्य ओएस पर चलने वाले 32-बिट माइक्रोप्रोसेसर की मात्रा में 30 सेंट की लागत होती है। मैं वर्तमान में इस पैमाने के दोनों सिरों पर परियोजनाएँ कर रहा हूँ। सबसे छोटे माइक्रोस पर कोड मेमोरी केवल कुछ केबी हो सकती है, केवल कुछ सौ बाइट्स रैम के साथ। एक मिड-रेंज 16-बिट माइक्रो कॉस्ट $ 3 की मात्रा में 256KB प्रोग्राम स्टोरेज और 16KB की रैम हो सकती है।
सीमित मेमोरी संसाधनों के अलावा, एम्बेडेड प्रोग्रामिंग का एक पहलू जो सॉफ्टवेयर डेवलपमेंट के अन्य क्षेत्रों के विपरीत है, वह यह है कि प्रोग्रामर अक्सर रजिस्टर स्तर पर सीधे हार्डवेयर के साथ काम कर रहा है - या तो माइक्रो पर ही, या परिधि में संलग्न है UART, SPI या I2C जैसे सीरियल बूस के माध्यम से माइक्रो। इस कारण से, कम-अंत एम्बेडेड माइक्रो आमतौर पर सी या असेंबली भाषा में प्रोग्राम किए जाते हैं।
एंबेडेड सिस्टम अक्सर वास्तविक समय की घटनाओं से निपटते हैं, इसलिए एक एम्बेडेड फर्मवेयर प्रोग्राम में आमतौर पर कई रुकावट दिनचर्या होती है और संभव है एक छोटा आरटीओएस (वास्तविक समय ओएस)। ऐसे सिस्टम को डीबग करना अक्सर माइक्रो में समर्पित लाइनों के एक जोड़े का उपयोग करके हार्डवेयर सहायता की आवश्यकता होती है ताकि ब्रेकपॉइंट को एक पीसी से दूरस्थ रूप से सेट किया जा सके। लॉजिक एनालाइज़र, बस एनालाइज़र और ऑसिलोस्कोप इन प्रणालियों को डीबग करने के लिए उपयोग किए जाने वाले अतिरिक्त उपकरण हैं।
एम्बेडेड विकास के हार्डवेयर पहलुओं के कारण, डेवलपर्स के पास अक्सर कुछ इलेक्ट्रॉनिक्स पृष्ठभूमि होती है। (मेरे पास ईई और सीएस दोनों में डिग्री है)।