क्या एम्बेडेड प्रोग्रामिंग इलेक्ट्रिकल इंजीनियरिंग या सॉफ्टवेयर विकास के करीब है? [बन्द है]


34

मुझे माइक्रो कंट्रोलर्स पर एम्बेडेड C लिखने के लिए नौकरी दी जा रही है। पहले तो मैंने सोचा होगा कि मेरे लिए सॉफ़्टवेयर स्टैक पर एम्बेडिंग प्रोग्रामिंग बहुत कम है, लेकिन शायद मैं इसके बारे में गलत सोच रहा हूं।

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

मैं कंप्यूटर विज्ञान के लिए स्कूल गया और वास्तव में एक संकलक लिखने का आनंद लिया, समवर्ती एल्गोरिदम के बारे में सोच रहा था, डेटा संरचनाओं को डिजाइन कर रहा था, और फ्रेमवर्क विकसित कर रहा था। हालांकि, मैं वर्तमान में एक वेब डेवलपर के रूप में कार्यरत हूं, जो मेरे द्वारा बताई गई दिलचस्प चीजों को नहीं चिल्लाता है। (मैं वर्तमान में इस तरह के मुद्दों से निपटता हूं: "इस चेक बॉक्स को बाईं ओर 4 पिक्सेल की आवश्यकता है" और "इस तिथि को प्रारूपित किया गया है"।)

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

जवाबों:


33

यदि आप एम्बेडेड सिस्टम पर काम करना चाहते हैं, तो हां, आपको कुछ समय ईई की तरह सोचने की जरूरत है। यह आम तौर पर तब होता है जब आप विभिन्न बाह्य उपकरणों (UART, SPI, I2C या USB जैसे सीरियल बूस), 8 और 16-बिट टाइमर, घड़ी जनरेटर, और ADCs और DACs के साथ इंटरफ़ेस के लिए कोड लिख रहे होते हैं। माइक्रोकंट्रोलर के लिए "डेटाशीट्स" अक्सर सैकड़ों पृष्ठों में चलते हैं क्योंकि वे हर रजिस्टर के हर बिट का वर्णन करते हैं। यह एक योजनाबद्ध पढ़ने में सक्षम होने में मदद करता है ताकि आप एक आस्टसीलस्कप या तर्क विश्लेषक के साथ एक बोर्ड की जांच कर सकें।

अन्य समय में, यह सिर्फ सॉफ्टवेयर लिख रहा है। लेकिन तंग बाधाओं के तहत: अक्सर आपके पास एक औपचारिक ओएस या अन्य ढांचा नहीं होगा, और आपके पास केवल कुछ KB रैम, और शायद 64 KB प्रोग्राम मेमोरी हो सकती है। (ये सीमाएं मान रही हैं कि आप छोटे 8 या 16-बिट माइक्रो पर प्रोग्रामिंग कर रहे हैं; यदि आप 32-बिट प्रोसेसर पर एम्बेडेड लिनक्स के साथ काम कर रहे हैं, तो आपके पास समान मेमोरी की कमी नहीं होगी लेकिन फिर भी आपको किसी भी कस्टम से निपटना होगा परिधीय हार्डवेयर जो आपके लिनक्स डिस्ट्रो चालकों के लिए प्रदान नहीं करता है।)

मेरे पास ईई और सीएस दोनों में पृष्ठभूमि है, इसलिए मैं सिक्के के दोनों किनारों का आनंद लेता हूं। मैं कुछ वेब प्रोग्रामिंग (ज्यादातर PHP), और डेस्कटॉप एप्स (C # और डेल्फी) भी करता हूं, लेकिन मुझे हमेशा एम्बेडेड प्रोजेक्ट्स पर काम करने में सबसे ज्यादा मजा आया है।


आपके उत्तर के लिए धन्यवाद। अड़चनें वास्तव में मुझे परेशान नहीं करती हैं। मैं सिर्फ अपने आप को एक सॉफ्टवेयर आदमी के रूप में समझता हूं, और एक इलेक्ट्रिकल इंजीनियर के रूप में नहीं। क्या आप कहेंगे "निम्न स्तर की प्रोग्रामिंग" "उच्च स्तर की इलेक्ट्रिकल इंजीनियरिंग" के समान है?
जेरेमी हेइलर

32-बिट और लिनक्स अवलोकनों के लिए +1 - मैं टेलीकॉम में काम करता था और स्विच हार्डवेयर एक अमीगा (मोटरला 68k प्रोसेसर) के स्ट्रिप डाउन संस्करण के लिए कोडिंग की तरह था। कुछ बहुत खुशी का समय था - कभी-कभी याद आती है।
गैरी रोवे

3
@ जेरेमी, हां, जब आप एक जटिल परिधीय के लिए सेटिंग्स का पता लगाने की कोशिश कर रहे हैं, या एक गुंजाइश पर एक धारावाहिक बिट स्ट्रीम को देखते हुए, कभी-कभी ऐसा लगता है कि आप निम्न-स्तरीय प्रोग्रामिंग कर रहे हैं और कभी-कभी आप एक उच्च की तरह सोच रहे हैं -लेवल ईई। आप आईडीई के डिबगर विंडो के अंदर रजिस्टर सामग्री को देखने में बहुत समय लगा सकते हैं। उस स्तर पर, आप सीधे हार्डवेयर को देख रहे हैं।
21

20

@ tcrosley का जवाब बेहतरीन है। आपको इलेक्ट्रिकल इंजीनियर बनने की आवश्यकता नहीं है, लेकिन मूल बातें जानने से मदद मिलती है।

मुझे नहीं लगता कि आपको "सॉफ़्टवेयर स्टैक पर बहुत कम" होने का डर है। मुझे एक बहुत ही दिलचस्प समस्याओं को एक एम्बेडेड इंजीनियर के रूप में हल करना होगा। आपने अपने द्वारा किए गए कार्यों की सूची का उल्लेख किया है:

  • समवर्ती एल्गोरिदम - अतुल्यकालिक हार्डवेयर स्तर के व्यवधान से निपटने में ओएस थ्रेड मॉडल का उपयोग करने के रूप में कई दिलचस्प चुनौतियां हैं।

  • डिजाइनिंग डेटा संरचनाएं - जांचें। कॉम्पैक्टनेस और कुशल पहुंच के लिए डिज़ाइन।

  • विकासशील रूपरेखा - जाँच करें। नंगे हड्डियों प्रणालियों पर, आप एक मिनी-ओएस डिजाइनिंग को समाप्त कर सकते हैं।

  • एक कंपाइलर लिखना - शायद नहीं, लेकिन आप कंपाइलर के असेंबली जनरेशन स्टेप के समान लो-लेवल कोड ऑप्टिमाइजेशन कर सकते हैं।

मैं यूआई के किसी भी दिन कोडिंग पर एम्बेडेड सिस्टम पर काम करना चाहूंगा। पहली बार जब आप मशीन को चालू करते हैं तो जिस तरह से आप उसे प्रोग्राम करते हैं उसे देखना कभी नहीं भूलेंगे। यह पिक्सेल को धकेलने की तुलना में अधिक संतोषजनक है।


1-से -1 मैपिंग के लिए धन्यवाद। एम्बेडेड काम के माहौल के बारे में वास्तव में कुछ भी नहीं जानना, यह जानना अच्छा है।
जेरेमी हीलर

6

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

क्योंकि लगभग हमेशा किसी न किसी तरह की समस्या होती है, डिबगिंग कौशल आवश्यक हैं। यदि बाहरी परिधीय काम नहीं करता है, तो क्या यह खराब चिप है, चिप से खराब संबंध है, बग कोड या ऑन-चिप परिधीय का गलत उपयोग है? बताने का एकमात्र तरीका व्यापक डिबगिंग है। इसका मतलब है कि ऑसीलोस्कोप, नेटवर्क एनालाइजर, लॉजिक एनालिसर्स और टारगेट डेबगर्स के साथ सहज होना। डिबगिंग प्रक्रिया लगभग वैज्ञानिक हो जाती है। मैं एक परिकल्पना विकसित करता हूं, मेरे परिकल्पना और परीक्षण के खिलाफ या सबूत देने के लिए एक प्रयोग डिजाइन करता हूं।

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


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

5

मेरे अनुभव में, किसी को "इलेक्ट्रॉनिक्स इंजीनियर" टोपी के बजाय "सॉफ़्टवेयर डेवलपर" टोपी के साथ एम्बेडेड सिस्टम सॉफ़्टवेयर डेवलपमेंट के लिए बेहतर परिणाम मिलते हैं। (हार्डवेयर इंजीनियरिंग में TDD और CI जैसी प्रथाएं कम सामान्य हैं)

दूसरी ओर, मुझे लगता है कि एक एम्बेडेड सिस्टम के लिए विकसित होने का अनुभव किसी को बेहतर बनाता है; अधिक अच्छी तरह से गोल सॉफ्टवेयर डेवलपर।


2
वास्तव में, यहां एम्बेडेड डेवलपर्स, उद्योग को यहां अधिक सीएस लोगों की आवश्यकता है, क्योंकि सॉफ्टवेयर बहुत अधिक जटिल हो रहा है, हम अच्छे सॉफ्टवेयर प्रथाओं में वास्तव में खराब हैं।
बज्रके फ्रंड-हैन्सन

मुझे लगता है कि सीएस लोग भी इसका आनंद लेंगे, क्योंकि एम्बेडेड सॉफ्टवेयर लिखना सबसे अधिक पुरस्कृत (बौद्धिक रूप से, यदि वित्तीय रूप से नहीं) नौकरियों में से एक है जो एक सॉफ्टवेयर डेवलपर कर सकता है।
विलियम पेने

3

मैं लगभग 8 साल पहले ऐसी ही स्थिति में था। मैं अनुप्रयोग और सर्वर वातावरण में सॉफ्टवेयर विकास के उस बिंदु पर 7 साल था। ZX स्पेक्ट्रम पर एक किशोर के रूप में Z80 असेंबलर में लिखने से पहले मेरा एकमात्र अनुभव हार्डवेयर के साथ निम्न स्तर का व्यवहार था।

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

एक पहलू जो मैं देने में विफल रहा वह था डिवाइस ड्राइवर का काम। मैंने वास्तव में इसे कभी नहीं समझा, जो एक बात है कि मैं और वह कंपनी निर्देशक कभी नहीं समझ पाए। यह सिर्फ एक स्वीकृत तथ्य बन गया।

एक ऑसिलोस्कोप और एक सोल्डरिंग आयन के साथ परिचित होना आवश्यक होगा। यह याद रखना कि जब कोई हार्डवेयर आदमी 26 नंबर कहता है तो वह हमेशा 0x26 उपयोगी होता है। यह महसूस करते हुए कि हार्डवेयर इंजीनियरों को सॉफ्टवेयर के साथ काम करना बहुत निराशाजनक लगता है, लेकिन फिर, एक हार्डवेयर प्रोजेक्ट जिसमें सॉफ्टवेयर शामिल नहीं है, को केबल कहा जाता है।

मैं 4 साल तक उस भूमिका में रहा और केवल इसलिए छोड़ दिया क्योंकि मुझे वास्तव में शानदार अवसर मिला था।


अपने अनुभव को साझा करने के लिए धन्यवाद टॉलेमी। मैं इसकी सराहना करता हूं।
जेरेमी हेइलर

आजकल काफी सारे केबल्स में माइक्रोप्रोसेसर लगे होते हैं। :-)
विलियम पायने

2

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

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


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

2

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

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

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


"ईई के औइजा-बोर्ड" - शानदार, मैं इसे अच्छी तरह से जानता हूं
मार्टिन बेकेट

2

मैंने कोई व्यावसायिक स्तर की एम्बेडेड प्रोग्रामिंग नहीं की है, लेकिन मेरा बैचलर ज्यादातर एम्बेडेड सिस्टम के बारे में है, जिसमें से मुझे कुछ वर्षों का वास्तविक अनुभव है। हमने Atmel AVR पर C का उपयोग किया और VHDL के साथ कुछ टेक्सास इंस्ट्रूमेंट्स चिप्स को छुआ, और ARM पर कुछ सैद्धांतिक सामग्री थी।

हमारे पास जो कुछ भी था, वह लगभग 50-60 प्रतिशत प्रोग्रामिंग (सी), 20 प्रतिशत नियोजन / डिजाइन (यूएमएल), और बाकी भौतिक इलेक्ट्रॉनिक्स (टांका लगाना, मापना, वायरिंग, केबल बनाना आदि) था। मैं यह भी मानता हूं कि यह करना बहुत दिलचस्प और मजेदार था, और मैं वास्तव में चाहता हूं कि मेरा भी एम्बेडेड सिस्टम में करियर हो। काश, एम्बेडेड सिस्टम में एक बहुत छोटे बाजार के साथ, मुझे सादे पुराने जावा ईई का सहारा लेना पड़ा।

लेकिन मैं पीछे हटा; मैं कहूंगा कि उपर्युक्त प्रतिशत वास्तविक दुनिया की नौकरियों के काफी करीब हैं, क्योंकि हमारे शिक्षकों के अपने उद्यम हैं, और यह भी उल्लेख किया है कि वे इसे यथासंभव यथार्थवादी बनाने की कोशिश करेंगे। हम भी बेतरतीब 180 डिग्री में बदल गया था आवश्यकताओं मध्य परियोजना, हे हे।

ढेर के लिए के रूप में। एम्बेडेड प्रोग्रामिंग को जानने से आपको अपने स्वयं के और बहुत वास्तविक हार्डवेयर उत्पाद बनाने के लिए विशाल अवसर मिलेंगे जो आप एशिया में वास्तविक पौधों में निर्मित कर सकते थे, फिर उन्हें अपने परिसर में इकट्ठा करना (घर पर या अपनी कंपनी में)। यह बेहद दिलचस्प है! आप कई गैजेट्स भी बना सकते हैं जो घर पर मददगार होंगे, जैसे कि मूवमेंट नियंत्रित हॉसलाइट्स, एक कॉफ़ी मशीन के लिए टाइमर, आपकी मॉर्निंग जोई को स्वचालित रूप से तैयार करने के लिए और इसी तरह। रोमांचक सामान वास्तव में!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.