คำถามติดแท็ก embedded-systems

"ระบบฝังตัวคือระบบคอมพิวเตอร์ที่ออกแบบมาสำหรับฟังก์ชันการควบคุมเฉพาะภายในระบบที่ใหญ่กว่าซึ่งมักมีข้อ จำกัด ในการประมวลผลแบบเรียลไทม์" Michael Barr. "อภิธานศัพท์ระบบสมองกลฝังตัว". ห้องสมุดเทคนิค Neutrino สืบค้นเมื่อ 2007-04-21 คัดลอกจาก Wikipedia.

5
มีข้อเสียเปรียบในการจัดสรรสแต็กจำนวนมากสำหรับอาร์เรย์เดียวในระบบฝังตัวหรือไม่?
ฉันมักจะไม่มีปัญหาในการตัดสินใจว่าข้อมูลบางอย่างจะต้องเป็นแบบโกลบอลสแตติกหรือบนสแต็ก (ไม่มีการจัดสรรแบบไดนามิกที่นี่ดังนั้นจึงไม่มีการใช้ฮีป) ฉันได้อ่านคำถามสองสามข้อเช่นคำถามนี้แต่คำถามของฉันเฉพาะเจาะจงมากขึ้นเพราะมันเกี่ยวข้องกับข้อมูลจำนวนมากมากเมื่อเทียบกับหน่วยความจำระบบ ฉันกำลังใช้งานโค้ดที่มีอยู่ซึ่งฉันพยายามปรับปรุง (ออกแบบปัญหาที่เป็นไปได้การแสดง ฯลฯ ) รหัสนี้วิ่งบน MCU 8bit เก่ามีเพียง4KB ของแรม ในรหัสนี้ฉันต้องเผชิญกับการใช้งานของอาร์เรย์เกือบ 1KB (ใช่1KB ในระบบRAM 4KB ) แต่ละไบต์ของอาร์เรย์นี้ถูกใช้นั่นไม่ใช่คำถาม ปัญหาคือว่าอาร์เรย์นี้เป็นอาร์เรย์แบบคงที่ในไฟล์ที่มีการประกาศดังนั้นวงจรชีวิตของมันเป็นเช่นเดียวกับโปรแกรมหนึ่ง (เช่นถือได้ว่าไม่มีที่สิ้นสุด) อย่างไรก็ตามหลังจากอ่านโค้ดฉันเพิ่งค้นพบว่าอาเรย์นี้ไม่จำเป็นต้องมีวงจรชีวิตที่ไม่มีที่สิ้นสุดมันถูกสร้างและจัดการด้วยวิธีการที่สมบูรณ์ดังนั้นเราควรจะสามารถประกาศได้เฉพาะในฟังก์ชั่นที่ใช้ วิธีนี้มันจะอยู่ในสแต็คและเราจะบันทึก 1KB ของ RAM นี้ ทีนี้คำถาม: นี่เป็นความคิดที่ดีไหม? จากมุมมองการออกแบบหากไม่ต้องการวงจรชีวิตที่ไม่มีที่สิ้นสุด / ทั่วโลกมันเป็นของสแต็ค แต่เดี๋ยวก่อนนั่นคือ 1KB จาก 4KB ไม่มีข้อเสียในการจัดสรร RAM 25% ของแบบนี้ใช่ไหม? (นั่นอาจเป็น 50% หรือมากกว่าของสแต็ก) ใครบางคนสามารถแบ่งปันประสบการณ์บางอย่างกับสถานการณ์แบบนี้หรือใครบางคนคิดเกี่ยวกับเหตุผลที่ถูกต้องที่จะไม่วางอาร์เรย์นี้ในกอง? ฉันกำลังมองหาข้อเสียทางเทคนิคเช่นเดียวกับความคิดเห็นในการออกแบบ สิ่งเดียวที่ฉันใส่ใจคือฉันต้องทำให้แน่ใจว่าจริง ๆ แล้วฉันมีสแต็ก 1KB ฟรีเมื่อเข้าสู่ฟังก์ชันนี้ …

3
อนุสัญญาการตั้งชื่อทั่วไปสำหรับฟังก์ชั่นสาธารณะและส่วนตัวของ OO C คืออะไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว คำถามสั้น ๆ มีวิธีทั่วไปในการตั้งชื่อสมาชิก 'สาธารณะ' และ 'ส่วนตัว' ของโครงการ OO C หรือไม่? ประวัติความเป็นมา ผมเข้าใจว่าประชาชนและสมาชิกส่วนตัวไม่ได้จริงๆมีอยู่ในภาษา C อย่างไรก็ตามเช่นเดียวกับโปรแกรมเมอร์ C ส่วนใหญ่ฉันยังคงปฏิบัติต่อสมาชิกในฐานะสาธารณะหรือส่วนตัวเพื่อคงไว้ซึ่งการออกแบบ OO นอกเหนือจากวิธีการทั่วไปของ OO ฉันพบว่าตัวเองทำตามรูปแบบ (ดูตัวอย่างด้านล่าง) ซึ่งทำให้ฉันแยกแยะว่าวิธีใดมีความหมายสำหรับโลกภายนอกเทียบกับสมาชิกส่วนตัวที่อาจมีการตรวจสอบน้อยลง / มีประสิทธิภาพมากขึ้นเป็นต้น ... มีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือเป็นตัวอย่างของฉันที่ด้านล่างเป็นวิธีที่ดีในการเข้าถึงสิ่งนี้หรือไม่? ส่วนหัวตัวอย่าง #ifndef _MODULE_X_H_ #define _MODULE_X_H_ bool MOD_X_get_variable_x(void); void MOD_X_set_variable_x(bool); #endif /* _MODULE_X_H_ */ ตัวอย่างแหล่งที่มา // Module Identifier: …

1
เหตุใดจึงต้องใช้เวลาหลายชั่วโมงในการถอดรหัสสัญญาณจาก Curiosity rover ผ่าน MRO
วิดีโอคลิปของนาซ่ากล่าวว่าข้อมูลจากCuriosity ที่ส่งโดยMars Reconnaissance Orbiter (MRO) จะถูกเก็บไว้สองสามชั่วโมงจากนั้นส่งไปยัง Earth (ดูเหมือนจะใช้เวลาประมาณ 14 นาที) หลังจากนั้นจะใช้เวลาหลายชั่วโมงกว่าวิศวกรจะถอดรหัส ข้อมูล. จากสิ่งที่ฉันได้อ่านดูเหมือนว่า MRO สามารถใช้เป็นอุปกรณ์สื่อสารสำรองสำหรับ Curiosity หากจำเป็น ในกรณีของการลงจอดของ Curiosityฉันคิดว่า MRO จะเก็บข้อมูลไว้จนกว่ามันจะโคจรรอบดาวเคราะห์สีแดงและมีแนวสายตาตรงกับโลกก่อนที่จะส่งสัญญาณ (จากนั้นฉันแค่เก็งกำไรที่นี่) เข้าใจ. แต่ทำไมต้องใช้เวลาวิศวกรนาซ่าในการถอดรหัสสัญญาณที่ถ่ายทอดโดย MRO หลังจากที่ได้รับบนโลกนี้ ( จุดโบนัส: ปกติจะใช้เวลาหลายชั่วโมงในการถอดรหัสสัญญาณ MRO หรือไม่ )

4
เรียนรู้การพัฒนาระบบฝังตัวโดยไม่มีการควบคุม [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันสำเร็จการศึกษาในปีนี้และมีงานแรกที่เกี่ยวข้องกับการเขียนโปรแกรม C การบริหาร Linux และการพัฒนาระบบฝังตัว ฉันรู้สึกพอใจกับงานของฉันมาก แต่ฉันเกรงว่าฉันจะไม่เป็นโปรแกรมเมอร์ที่ประสบความสำเร็จในสาขานี้ ฉันเป็นนักพัฒนาคนเดียวในงานของฉันตอนนี้ด้วยเพื่อนร่วมทีมของฉันเป็นผู้เชี่ยวชาญด้านฮาร์ดแวร์ไม่มีใครแนะนำหรือสอนฉันเกี่ยวกับวิธีการเขียนโปรแกรมแบบฝังตัวฉันต้องศึกษาด้วยตัวเองทั้งหมด ดังนั้นนี่คือคำถามของฉัน เป็นไปได้หรือไม่ที่จะเป็นนักพัฒนาระบบสมองกลฝังตัวที่ดีเริ่มต้นจากตำแหน่งระดับเริ่มต้นโดยไม่มีการควบคุมดูแลจากโปรแกรมเมอร์อาวุโส? ฉันจะกลายเป็นหนึ่งเดียวได้ (อาจด้วยความช่วยเหลือของฟอรั่มช่อง IRC ตำราเรียนที่ดี) ใช้เวลานานแค่ไหน? UPDATE:จนถึงตอนนี้ฉันได้รับคำตอบที่เป็นประโยชน์เพียงเล็กน้อย แต่ฉันก็ตระหนักว่าฉันต้องการตัวชี้เฉพาะในเรื่อง ดังนั้นนี่คือคำถามเฉพาะของฉัน: มีตำราดีอะไรบ้างที่สามารถใช้เพื่อเรียนรู้การพัฒนาแบบฝัง ชุมชนออนไลน์พิเศษใดที่มีประโยชน์สำหรับนักพัฒนาที่ฝังตัวที่ต้องการ (ไม่นับสิ่งทั่วไปเช่น Stack Overflow, Reddit และอื่น ๆ ) บล็อกที่น่าสนใจที่สุดสำหรับการพัฒนาแบบฝังคืออะไร?

4
การละเว้น“ destructors” ใน C กำลังทำให้ YAGNI อยู่ไกลเกินไปใช่ไหม
ฉันกำลังทำงานกับแอพพลิเคชั่นแบบฝังตัวขนาดกลางใน C โดยใช้เทคนิคแบบ OO "คลาส" ของฉันคือโมดูล. h / .c โดยใช้ data structs และ function pointers structs เพื่อเลียนแบบ encapsulation, polymorphism และการฉีดพึ่งพา ตอนนี้ใคร ๆ ก็คาดหวังว่าmyModule_create(void)ฟังก์ชั่นจะมาพร้อมกับmyModule_destroy(pointer)คู่ แต่โครงการที่ถูกฝังอยู่นั้นทรัพยากรที่มีการสร้างอินสแตนซ์สมจริงไม่ควรปล่อยออกมา ฉันหมายถึงถ้าฉันมีพอร์ตอนุกรม UART 4 ​​พอร์ตและฉันสร้างอินสแตนซ์ UART 4 ​​อันด้วยหมุดและการตั้งค่าที่ต้องการมีเหตุผลที่ไม่ต้องการทำลาย UART # 2 ในบางจุดในระหว่างรันไทม์ ดังนั้นตามหลักการ YAGNI (คุณไม่ต้องการมัน) ฉันควรละเว้น destructors หรือไม่ มันดูแปลกมากสำหรับฉัน แต่ฉันไม่สามารถนึกถึงการใช้งานได้สำหรับพวกเขา ทรัพยากรจะถูกปลดปล่อยเมื่ออุปกรณ์ปิด

1
“ ระบบวัตถุประสงค์ทั่วไป” หมายถึงอะไรสำหรับ Java SE Embedded?
เว็บไซต์ของออราเคิลพูดถึงสิ่งนี้เกี่ยวกับใบอนุญาตแบบฝังตัวของ Java SE : การพัฒนานั้นฟรี แต่จำเป็นต้องมีค่าลิขสิทธิ์เมื่อใช้งานกับสิ่งอื่นนอกเหนือจากระบบวัตถุประสงค์ทั่วไป "ระบบวัตถุประสงค์ทั่วไป" หมายถึงอะไรที่นี่ เรามีเครือข่ายเซ็นเซอร์ทั่วประเทศ ในแต่ละกล่องที่เราติดตั้งมีบอร์ดไมโครคอนโทรลเลอร์ซึ่งรับข้อมูลจากสภาพแวดล้อมและส่งข้อมูลบนพอร์ตอนุกรมไปยังบอร์ดฝังตัวที่ใช้ ARM ในระบบกระดานนี้มีกระบวนการ Java ที่อ่านและส่งข้อมูลไปยังเซิร์ฟเวอร์กลางของเราโดยใช้ JMS สิ่งนี้จัดเป็นระบบวัตถุประสงค์ทั่วไปหรือไม่ ขอโทษฉันถามที่นี่ เราอยู่ในอิหร่านไม่มีสำนักงาน Oracle ที่นี่เพื่อถาม

3
ตัวจัดสรรฮีปแบบกำหนดเอง
โปรแกรมส่วนใหญ่ค่อนข้างไม่เป็นทางการเกี่ยวกับการจัดสรรฮีปแม้ภาษาที่ใช้งานโปรแกรมต้องการจัดสรรออบเจ็กต์ใหม่มากกว่าการดัดแปลงฮีทเก่าและปล่อยให้ผู้รวบรวมขยะกังวลเกี่ยวกับการปลดปล่อยสิ่งต่าง ๆ ในการเขียนโปรแกรมฝังตัวเซกเตอร์แบบเงียบอย่างไรก็ตามมีหลายแอปพลิเคชันที่คุณไม่สามารถใช้การจัดสรรฮีปได้ทั้งหมดเนื่องจากหน่วยความจำและข้อ จำกัด แบบเรียลไทม์ จำนวนวัตถุของแต่ละประเภทที่จะจัดการเป็นส่วนหนึ่งของข้อมูลจำเพาะและทุกอย่างได้รับการจัดสรรแบบคงที่ การเขียนโปรแกรมเกม (อย่างน้อยกับเกมที่มีความทะเยอทะยานเกี่ยวกับการผลักฮาร์ดแวร์) บางครั้งก็อยู่ระหว่าง: คุณสามารถใช้การจัดสรรแบบไดนามิก แต่มีหน่วยความจำเพียงพอและมีข้อ จำกัด แบบเรียลไทม์อ่อนที่คุณไม่สามารถถือว่าตัวจัดสรรเป็นกล่องดำ ให้ใช้การรวบรวมขยะอย่างเดียวดังนั้นคุณต้องใช้ตัวจัดสรรแบบกำหนดเอง นี่คือหนึ่งในเหตุผลที่ C ++ ยังคงใช้กันอย่างแพร่หลายในอุตสาหกรรมเกม มันช่วยให้คุณทำสิ่งต่าง ๆ เช่นhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html มีโดเมนอื่นใดบ้างที่อยู่ระหว่างนั้น? นอกเหนือจากเกมแล้วมีการใช้ตัวจัดสรรแบบกำหนดเองอย่างหนักที่ไหน?

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

2
Embedded Linux และ Windows Embedded Standard 7 [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา โอเคมองหาคำตอบส่วนตัว บริษัท ของฉันเคยเป็นร้านค้าลีนุกซ์มาก่อนเราผลิตและจำหน่ายกล่องที่สร้างขึ้นเพื่อวัตถุประสงค์ด้านความปลอดภัย เมื่อเร็ว ๆ นี้เราตัดสินใจที่จะสร้างกล่อง Embedded Windows Standard 7 เพราะมันสั้นลงการพัฒนาและเวลาในการทำตลาดของเราและเนื่องจากเครื่องมือทั้งหมดนั้นมีวางจำหน่ายที่ชั้นวางสำหรับ windows สิ่งที่ฉันกำลังมองหาคือคำตอบที่มั่นคงเนื่องจากเกี่ยวข้องกับความปลอดภัยของ WES7 กับ Linux WES7 มีเสถียรภาพเพียงใดความพยายามในการแฮ็คการโจมตีของไวรัสและอื่น ๆ จากมุมมองทางการตลาดสิ่งที่ผู้อื่นพูดได้หรือควรจะเป็นประโยชน์ของการใช้ WES7 บน Linux? ยังมี .... บ้าง? มีการเปรียบเทียบอะไรบ้างระหว่างความปลอดภัยของเดสก์ท็อป Windows 7 และ Windows 7 แบบฝัง คำตอบใด ๆ จะได้รับการชื่นชมอย่างมาก ขอบคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.