การเขียนโปรแกรมแบบฝังอยู่ใกล้กับวิศวกรรมไฟฟ้าหรือการพัฒนาซอฟต์แวร์หรือไม่? [ปิด]


34

ฉันกำลังถูกหางานเพื่อเขียน C แบบฝังลงในไมโครคอนโทรลเลอร์ ตอนแรกฉันคิดว่าการฝังการเขียนโปรแกรมต่ำเกินไปสำหรับซอฟต์แวร์สแต็กสำหรับฉัน แต่บางทีฉันอาจคิดผิด

ปกติฉันจะยักไหล่เขียนรหัสที่ฝังตัวเพราะฉันไม่คิดว่าตัวเองเป็นวิศวกรไฟฟ้า นี่เป็นสมมติฐานที่ไม่ดีใช่ไหม ฉันสามารถเขียนซอฟต์แวร์ที่น่าสนใจและมีประโยชน์สำหรับระบบฝังตัวหรือฉันจะเตะตัวเองต่ำลงไปในกองซ้อนของซอฟต์แวร์หรือไม่

ฉันไปโรงเรียนวิทยาศาสตร์คอมพิวเตอร์และสนุกกับการเขียนคอมไพเลอร์คิดเกี่ยวกับอัลกอริธึมพร้อมกันออกแบบโครงสร้างข้อมูลและพัฒนากรอบงาน อย่างไรก็ตามปัจจุบันฉันทำงานเป็นนักพัฒนาเว็บซึ่งไม่ได้กรีดร้องสิ่งที่น่าสนใจที่ฉันเพิ่งอธิบาย (ขณะนี้ฉันจัดการกับปัญหาเช่น: "ช่องทำเครื่องหมายนี้ต้องเป็น 4 พิกเซลทางด้านซ้าย" และ "รูปแบบวันที่นี้ผิด")

ฉันขอขอบคุณทุกคนที่เข้ามา ฉันรู้ว่าฉันต้องตัดสินใจด้วยตัวเองฉันแค่อยากจะชี้แจงเกี่ยวกับความหมายของการเป็นโปรแกรมเมอร์ฝังตัวและถ้ามันเหมาะกับสิ่งที่ฉันคิดว่าน่าสนใจ

คำตอบ:


33

หากคุณต้องการทำงานกับระบบฝังตัวได้ดีคุณต้องคิดว่า EE เป็นบางครั้ง โดยทั่วไปเมื่อคุณเขียนโค้ดเพื่อเชื่อมต่อกับอุปกรณ์ต่อพ่วงต่างๆ (บัสอนุกรมเช่น UART, SPI, I2C หรือ USB), ตัวจับเวลา 8 และ 16 บิต, ตัวสร้างสัญญาณนาฬิกาและ ADC และ DAC "เอกสารข้อมูลทางเทคนิค" สำหรับไมโครคอนโทรลเลอร์มักจะวิ่งเข้าไปในหน้าเว็บหลายร้อยหน้าเพราะมันอธิบายทุก ๆ การลงทะเบียน มันจะช่วยให้สามารถอ่านแผนผังเพื่อให้คุณสามารถตรวจสอบบอร์ดที่มีออสซิลโลสโคปหรือเครื่องวิเคราะห์ตรรกะ

ในบางครั้งมันเป็นเพียงการเขียนซอฟต์แวร์ แต่ภายใต้ข้อ จำกัด ที่เข้มงวด: บ่อยครั้งที่คุณจะไม่มีระบบปฏิบัติการอย่างเป็นทางการหรือกรอบงานอื่น ๆ และคุณอาจมี RAM เพียงไม่กี่ KB และอาจมีหน่วยความจำโปรแกรม 64 KB (ขีด จำกัด เหล่านี้สมมติว่าคุณกำลังเขียนโปรแกรมบนไมโคร 8 หรือ 16 บิตที่เล็กกว่าถ้าคุณทำงานกับ Linux ที่ฝังอยู่ในโปรเซสเซอร์ 32 บิตคุณจะไม่มีข้อ จำกัด ของหน่วยความจำแบบเดียวกัน ฮาร์ดแวร์อุปกรณ์ต่อพ่วงที่ Linux distro ของคุณไม่มีไดรเวอร์ให้)

ฉันมีภูมิหลังทั้งใน EE และ CS ดังนั้นฉันจึงสนุกไปกับทั้งสองด้านของเหรียญ ฉันยังทำการเขียนโปรแกรมเว็บ (ส่วนใหญ่เป็น PHP) และแอปเดสก์ท็อป (C # และ Delphi) แต่ฉันก็สนุกกับการทำงานในโครงการฝังตัวมากที่สุด


ขอบคุณสำหรับคำตอบ. ข้อ จำกัด ไม่ได้รบกวนฉันจริงๆ ฉันคิดว่าตัวเองเป็นคนซอฟต์แวร์ไม่ใช่วิศวกรไฟฟ้า คุณจะพูดว่า "การเขียนโปรแกรมระดับต่ำ" เหมือนกับ "วิศวกรรมไฟฟ้าระดับสูง" หรือไม่?
Jeremy Heiler

+1 สำหรับการสังเกตแบบ 32 บิตและ Linux - ฉันเคยทำงานด้านโทรคมนาคมและฮาร์ดแวร์สวิทช์เป็นเหมือนการเข้ารหัสสำหรับ Amiga (ตัวประมวลผล Motorla 68k รุ่นที่ถอดลงมา) มีช่วงเวลาที่มีความสุขมาก - พลาดบางครั้ง
Gary Rowe

3
@ เจอเรมี่ใช่เมื่อคุณพยายามหาการตั้งค่าสำหรับอุปกรณ์ต่อพ่วงที่ซับซ้อนหรือดูที่บิตสตรีมแบบอนุกรมบนขอบเขตบางครั้งดูเหมือนว่าคุณกำลังเขียนโปรแกรมระดับต่ำและบางครั้งคุณต้องคิดแบบสูง ระดับ EE คุณอาจใช้เวลามากมายในการดูเนื้อหาการลงทะเบียนภายในหน้าต่างดีบักเกอร์ของ IDE ในระดับนั้นคุณกำลังดูฮาร์ดแวร์โดยตรง
tcrosley

20

@ tcrosley คำตอบนั้นยอดเยี่ยม คุณไม่จำเป็นต้องเป็นวิศวกรไฟฟ้า แต่การรู้พื้นฐานช่วยได้

ฉันไม่คิดว่าคุณต้องกลัวว่าจะ "ต่ำเกินไปในสแต็กซอฟต์แวร์" ฉันต้องแก้ปัญหาที่น่าสนใจมากมายในฐานะวิศวกรฝังตัว คุณพูดถึงรายการงานที่คุณชอบ:

  • อัลกอริธึมที่เกิดขึ้นพร้อมกัน - การจัดการกับการขัดจังหวะระดับฮาร์ดแวร์แบบอะซิงโครนัสมีความท้าทายที่น่าสนใจมากมายเช่นเดียวกับการใช้เธรด OS แบบจำลอง

  • การออกแบบโครงสร้างข้อมูล - ตรวจสอบ ออกแบบเพื่อความกะทัดรัดและการเข้าถึงที่มีประสิทธิภาพ

  • กรอบการพัฒนา - ตรวจสอบ ในระบบกระดูกเปลือยคุณสามารถออกแบบ mini-OS ได้

  • การเขียนคอมไพเลอร์ - อาจไม่ใช่ แต่คุณสามารถลงเอยด้วยการเพิ่มประสิทธิภาพโค้ดระดับต่ำซึ่งคล้ายกับขั้นตอนการสร้างแอสเซมบลีของคอมไพเลอร์

ฉันเลือกที่จะทำงานกับระบบฝังตัวผ่านการเข้ารหัส UI ได้ทุกวัน คุณจะไม่มีวันลืมในครั้งแรกที่คุณดูเครื่องจักรเริ่มเคลื่อนย้ายวิธีที่คุณตั้งโปรแกรมไว้ เป็นที่พอใจมากกว่าการกดพิกเซล


ขอบคุณสำหรับการแมปแบบ 1 ต่อ 1 ไม่รู้อะไรเลยเกี่ยวกับสภาพแวดล้อมการทำงานแบบฝังตัวมันเป็นเรื่องดีที่จะรู้
Jeremy Heiler

6

ในฐานะโปรแกรมเมอร์ฝังตัวหน้าที่ของฉันคือการทำให้ฮาร์ดแวร์ทำงานตามความต้องการ โดยทั่วไปฉันได้พัฒนาซอฟต์แวร์จำนวนมากบนกระดาน dev หรือฮาร์ดแวร์รุ่นก่อนหน้า เมื่อบอร์ดใหม่เข้ามางานของฉันคือการวางซอฟต์แวร์ลงบนกระดานและแสดงให้เห็นว่าทุกอย่างทำงานได้ดี

เนื่องจากมีปัญหาบางอย่างอยู่เสมอทักษะการดีบั๊กจึงเป็นสิ่งจำเป็น หากอุปกรณ์ต่อพ่วงภายนอกใช้งานไม่ได้แสดงว่าเป็นชิปที่ไม่ดีการเชื่อมต่อที่ไม่ดีกับชิปรหัส buggy หรือการใช้อุปกรณ์ต่อพ่วงบนชิปที่ไม่ถูกต้องหรือไม่? วิธีเดียวที่จะบอกได้คือการดีบักอย่างละเอียด ซึ่งหมายความว่ารู้สึกสบายใจกับออสซิลโลสโคปเครื่องวิเคราะห์เครือข่ายเครื่องวิเคราะห์ตรรกะและเครื่องมือดีบั๊กเป้าหมาย กระบวนการแก้จุดบกพร่องกลายเป็นวิทยาศาสตร์เกือบ ฉันพัฒนาสมมติฐานออกแบบการทดลองเพื่อให้หลักฐานหรือต่อต้านสมมติฐานของฉันและทดสอบ

เมื่อประเมินนักศึกษาฝึกงานหรือวิศวกรใหม่ที่ฝังตัวทักษะนี้เป็นสิ่งสำคัญที่สุด ซอฟต์แวร์ทั้งหมดมีปัญหา แต่เมื่อคุณเริ่มเชื่อมต่อกับโลกทางกายภาพความหลากหลายของปัญหาเหล่านั้นจะเพิ่มขึ้นแบบทวีคูณ แก่นแท้ของงานของฉันคือการแก้ปัญหาที่ยาวนานระหว่างแนวคิดและความเป็นจริง


จริงการแก้จุดบกพร่องเป็นทักษะที่จำเป็นสำหรับโปรแกรมเมอร์ฝังตัวบุคคล - โดยเฉพาะอย่างยิ่งชนิดของการดีบักที่เกี่ยวข้องกับการดูการแสดงขอบเขตการจัดเก็บที่แนบมากับแทร็คบน PCB เพื่อวินิจฉัยปัญหากับซอฟต์แวร์ฝังตัว :-) - อย่างไรก็ตามข้อดีที่มากขึ้นในทีมวิศวกรซอฟต์แวร์แบบฝังตัวคือความสามารถในการตรวจจับข้อผิดพลาดโดยอัตโนมัติผ่านการทดสอบขั้นสูงและเทคนิคการควบคุมคุณภาพ
วิลเลียมเพน

5

จากประสบการณ์ของฉันจะได้รับผลลัพธ์ที่ดีกว่าเมื่อเข้าใกล้การพัฒนาซอฟต์แวร์ระบบฝังตัวด้วยหมวก "ผู้พัฒนาซอฟต์แวร์" แทนที่จะเป็นหมวก "วิศวกรอิเล็กทรอนิกส์" (การปฏิบัติเช่น TDD & CI เป็นเรื่องธรรมดาน้อยในวิศวกรรมฮาร์ดแวร์)

ในทางกลับกันฉันคิดว่าประสบการณ์การพัฒนาระบบฝังตัวจะทำให้ระบบดีขึ้น นักพัฒนาซอฟต์แวร์ที่รอบรู้มากขึ้น


2
นักพัฒนาที่ฝังตัวที่นี่อุตสาหกรรมต้องการผู้คนจำนวนมากที่นี่เนื่องจากซอฟท์แวร์มีความซับซ้อนมากขึ้นเรื่อย ๆ
Bjarke Freund-Hansen

ฉันคิดว่าคน CS จะสนุกกับมันเช่นกันเพราะการเขียนซอฟต์แวร์ฝังตัวเป็นหนึ่งในงานที่คุ้มค่าที่สุด (ทางปัญญาหากไม่ได้รับด้านการเงิน) ที่นักพัฒนาซอฟต์แวร์สามารถทำได้
William Payne

3

ฉันอยู่ในสถานการณ์ที่คล้ายกันเมื่อประมาณ 8 ปีที่แล้ว ฉันมีจุดที่ 7 ปีของการพัฒนาซอฟต์แวร์ในสภาพแวดล้อมการใช้งานและเซิร์ฟเวอร์ ประสบการณ์เดียวของฉันที่เกี่ยวข้องกับฮาร์ดแวร์ในระดับต่ำก่อนที่จะเขียนในแอสเซมเบลอร์ Z80 เป็นวัยรุ่นในสเปกตรัม ZX

มันเป็นความท้าทายอย่างแน่นอน ฉันพบว่าการจัดการกับชุดชิปในแอสเซมเบลอร์สนุกมากและฉันเรียนรู้มากมายเกี่ยวกับฮาร์ดแวร์ บทบาทสำคัญของฉันคือการทดสอบฮาร์ดแวร์โดยใช้ซอฟต์แวร์ดังนั้นการเรียนรู้ที่จะรับมือกับการเขียนโปรแกรมและตระหนักว่าข้อผิดพลาดซอฟต์แวร์ของคุณนั้นเป็นข้อบกพร่องของฮาร์ดแวร์ ในความเป็นจริงบางครั้งอาจต้องใช้เวลาสักหน่อยในการทำงานโดยซอฟต์แวร์และฮาร์ดแวร์เพื่อระบุว่าข้อผิดพลาดเป็นฮาร์ดแวร์หรือซอฟต์แวร์

ด้านหนึ่งที่ฉันไม่สามารถส่งมอบได้คือไดรเวอร์อุปกรณ์ทำงาน ฉันไม่เคยเข้าใจสิ่งนี้ซึ่งเป็นสิ่งหนึ่งที่ฉันและผู้อำนวยการ บริษัท ไม่เคยเข้าใจว่าทำไม มันกลายเป็นความจริงที่ยอมรับได้

การทำความคุ้นเคยกับ Occiloscope และการบัดกรีไอออนจะเป็นสิ่งจำเป็น จำได้ว่าเมื่อผู้ชายฮาร์ดแวร์บอกว่าหมายเลข 26 เขาเสมอหมายความว่า 0x26 มีประโยชน์ ตระหนักว่าวิศวกรฮาร์ดแวร์พบว่าการจัดการกับซอฟต์แวร์ที่น่าผิดหวังช่วย แต่แล้วโครงการฮาร์ดแวร์ที่ไม่เกี่ยวข้องกับซอฟต์แวร์เรียกว่าสายเคเบิล

ฉันอยู่ในบทบาทนั้นมา 4 ปีและจากไปเพียงเพราะฉันถูกตุ๋นเพื่อโอกาสที่ยอดเยี่ยมจริงๆ


ขอบคุณสำหรับการแบ่งปันประสบการณ์ของคุณปโตเลมี ฉันรู้สึกทราบซึ้ง.
Jeremy Heiler

ทุกวันนี้สายเคเบิลจำนวนมากมีไมโครโปรเซสเซอร์อยู่ด้วย :-)
William Payne

2

เช่นเดียวกับทุกสิ่งมันต้องมีแนวทางที่สมดุล ฉันชอบทำงานกับระบบฝังตัวที่งานประจำวันของฉัน พวกเขาทำให้ฉันดีขึ้นที่วิศวกรรมไฟฟ้า การคำนวณทางกายภาพและระบบอัตโนมัติน่าตื่นเต้นมาก ในทางกลับกันการสร้างเว็บแอปและการซ่อมด้วยคลาวด์คอมพิวติ้งนั้นยอดเยี่ยม

หากคุณทำถูกต้องด้านซอฟต์แวร์ของคุณจะมองหาวิธีการทำสิ่งต่าง ๆ อย่างชาญฉลาดและดีกว่า ด้านฮาร์ดแวร์ของคุณจะทำให้คุณคำนึงถึงทรัพยากรและมีประสิทธิภาพสูงสุด


ขอบคุณสำหรับคำตอบ. ฉันเห็นว่ามันสามารถเปลี่ยนฟิลด์ได้เล็กน้อยหากไม่มีอะไรนอกจากเรียนรู้ระดับล่างแล้วเลื่อนกลับขึ้นไปอีกเล็กน้อย
Jeremy Heiler

2

ฉันไม่ใช่วิศวกรไฟฟ้า แต่ฉันได้ทำการพัฒนาซอฟต์แวร์แบบฝังตัวเล็กน้อย ปัญหาที่ใหญ่ที่สุดที่ฉันพบคือฉันมีพื้นฐานทางคณิตศาสตร์ที่มากขึ้นและดังนั้นฉันจึงไม่รู้วิธีสลายชุดอัลกอริทึมทางคณิตศาสตร์ขั้นสูงที่ซับซ้อนเป็นโค้ดโดยไม่ต้องใช้ความช่วยเหลือมากมาย

สำหรับทุกสิ่งที่ฉันจำเป็นต้องเล่นด้วยการส่งสัญญาณอ่านค่าจากอินพุตส่งข้อมูลไปยังผลลัพธ์และสิ่งต่าง ๆ ทั้งหมดนั้นฉันพบว่ามันมีแนวคิดที่แตกต่างกันเล็กน้อยกับสิ่งที่ฉันทำในแต่ละวัน นักพัฒนาซอฟต์แวร์สมัยเก่า การเขียนซอฟต์แวร์เป็นสิ่งที่เป็นจริง เมื่อคุณต้องออกไปข้างนอกซอฟแวร์จริงที่ฉันพบสิ่งที่ได้รับเพราะฉันไม่มีความรู้ที่จะยุ่งโดยตรงกับฮาร์ดแวร์ สิ่งนี้มักจะเกิดขึ้นเมื่อพยายามดีบักหรือทดสอบรหัส หากคุณมีห่วงโซ่เครื่องมือที่ยอดเยี่ยมจริง ๆ คุณอาจมีการรวมการดีบักและการจำลองสถานการณ์เพื่อกำจัดความเจ็บปวดส่วนใหญ่แม้จะมีทั้งหมดที่จะช่วยคุณบางครั้งคุณต้องกลับไปสู่พื้นฐานและทดสอบรหัสของคุณกับ ตัววิเคราะห์บางประเภทและความจริงก็คือแพลตฟอร์มที่ฝังตัวส่วนใหญ่ไม่ได้ '

จากมุมมองนี้ฉันไม่คิดว่าการเป็นวิศวกรไฟฟ้ามีความสำคัญต่อการเขียนโปรแกรมแบบฝังตัวหากงานง่ายและความต้องการเฉพาะฮาร์ดแวร์ที่แท้จริงมีน้อยที่สุด นอกเหนือจากนั้นฉันคิดว่าการเป็น EE จะทำให้ชีวิตง่ายขึ้นมากเมื่อทำงานในสภาพแวดล้อมแบบฝังตัวโดยเฉพาะอย่างยิ่งเมื่อจำเป็นต้องใช้วิทยาศาสตร์ที่แท้จริงเพื่อพิจารณาว่าปัญหาอยู่ที่ไหน


"Ouija-Board ของ EE" - ยอดเยี่ยมฉันรู้ดี
Martin Beckett

2

ฉันยังไม่ได้เขียนโปรแกรมแบบฝังระดับธุรกิจ แต่ปริญญาตรีของฉันส่วนใหญ่เกี่ยวกับระบบฝังตัวซึ่งฉันมีประสบการณ์จริงไม่กี่ปี เราใช้ C กับ Atmel AVR และสัมผัสกับชิป Texas Instruments บางตัวด้วย VHDL และมีบางอย่างในทางทฤษฎีเกี่ยวกับ ARM

ในสิ่งที่เรามีคือการเขียนโปรแกรมประมาณ 50-60 เปอร์เซ็นต์ (C) การวางแผน / ออกแบบ 20 เปอร์เซ็นต์ (UML) และที่เหลือคืออิเล็กทรอนิกส์ทางกายภาพ (การบัดกรีการวัดการเดินสายการผลิตสายเคเบิล ฯลฯ ) ฉันยังเห็นด้วยว่ามันน่าสนใจและสนุกมากที่จะทำและฉันหวังว่าฉันจะมีอาชีพในระบบฝังตัว อนิจจากับตลาดขนาดเล็กมากในระบบฝังตัวฉันต้องหันไปใช้ Java EE แบบเดิม ๆ

แต่ฉันเชือนแช ฉันจะบอกว่าเปอร์เซ็นต์ดังกล่าวข้างต้นค่อนข้างใกล้เคียงกับงานในโลกแห่งความเป็นจริงเนื่องจากครูของเรามีสถานประกอบการของตัวเองและยังกล่าวว่าพวกเขาจะพยายามทำให้เป็นจริงมากที่สุด เรายังมีการสุ่มเปลี่ยน 180 องศาในความต้องการกลางโครงการ Heh heh

ส่วนเรื่องของสแต็ค การรู้ถึงการเขียนโปรแกรมแบบฝังจะทำให้คุณมีโอกาสมากมายในการสร้างผลิตภัณฑ์ฮาร์ดแวร์ของคุณเองและเป็นของจริงที่คุณสามารถผลิตในโรงงานจริงในเอเชียจากนั้นจึงรวบรวมพวกเขาในสถานที่ของคุณ (ไม่ว่าจะที่บ้านหรือที่ บริษัท ของคุณเอง) มันน่าสนใจมาก! คุณยังสามารถสร้างแกดเจ็ตมากมายที่จะเป็นประโยชน์ที่บ้านเช่นควบคุมการเคลื่อนไหวของบ้านจับเวลาสำหรับเครื่องทำกาแฟเพื่อเตรียมโจเช้าของคุณโดยอัตโนมัติและอื่น ๆ สิ่งที่น่าตื่นเต้นแน่นอน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.