มุมมองทางเลือก: ไมโครคอนโทรลเลอร์ไม่หน่วยความจำไม่เพียงพอ
อย่างน้อยไม่ใช่เมื่อตั้งโปรแกรมอย่างเหมาะสม การเขียนโปรแกรมไมโครคอนโทรลเลอร์ไม่เหมือนกับการเขียนโปรแกรมวัตถุประสงค์ทั่วไปเพื่อทำอย่างถูกต้องคุณจะต้องตระหนักถึงข้อ จำกัด และโปรแกรมของมัน มีเครื่องมือที่ช่วยให้มั่นใจได้ ค้นหาพวกเขาและเรียนรู้พวกเขา - อย่างน้อยวิธีการอ่านสคริปต์ linker และคำเตือน
อย่างไรก็ตามอย่างที่ Majenko และคนอื่น ๆ บอกว่าไมโครคอนโทรลเลอร์ที่ตั้งโปรแกรมไม่ดีอาจหมดหน่วยความจำแล้วทำทุกอย่างรวมถึง infinite loop (อย่างน้อยก็ให้โอกาสตัวนับจ้องจับผิดในการรีเซ็ตมัน )
กฎการโปรแกรมทั่วไปสำหรับไมโครคอนโทรลเลอร์หลีกเลี่ยงสิ่งนี้: ตัวอย่างเช่นหน่วยความจำทั้งหมดจะถูกจัดสรรบนสแต็กหรือจัดสรร (แบบโกลบอล) แบบสแตติก ห้ามใช้ "ใหม่" หรือ "malloc" ดังนั้นการเรียกซ้ำเพื่อให้ความลึกสูงสุดของการซ้อนรูทีนย่อยสามารถวิเคราะห์และแสดงให้พอดีกับสแต็กที่มีอยู่
ดังนั้นที่เก็บข้อมูลสูงสุดที่ต้องการสามารถคำนวณได้เมื่อโปรแกรมรวบรวมหรือเชื่อมโยงและเปรียบเทียบกับขนาดหน่วยความจำ (มักเข้ารหัสในสคริปต์ตัวเชื่อมโยง) สำหรับตัวประมวลผลเฉพาะที่คุณกำหนดเป้าหมาย
ไมโครคอนโทรลเลอร์อาจไม่ได้ใช้หน่วยความจำไม่เพียงพอ แต่โปรแกรมของคุณอาจ และในกรณีนั้นคุณจะได้
- เขียนใหม่เล็กลงหรือ
- เลือกโปรเซสเซอร์ที่ใหญ่กว่า (มักใช้กับขนาดหน่วยความจำที่แตกต่างกัน)
กฎทั่วไปหนึ่งข้อสำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์คือMISRA-Cซึ่งเป็นที่ยอมรับในอุตสาหกรรมยานยนต์
แนวปฏิบัติที่ดีที่สุดในมุมมองของฉันคือการใช้ชุดย่อยSPARK-2014ของ Ada Ada ตั้งเป้าไปที่คอนโทรลเลอร์ขนาดเล็กเช่น AVR, MSP430 และ ARM Cortex อย่างดีพอสมควรและโดยปกติจะให้แบบจำลองที่ดีกว่าสำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์กว่า C แต่ SPARK เพิ่มคำอธิบายประกอบให้กับโปรแกรมในรูปแบบของความคิดเห็นซึ่งอธิบายว่าโปรแกรมกำลังทำอะไร
ตอนนี้เครื่องมือ SPARK จะวิเคราะห์โปรแกรมรวมถึงคำอธิบายประกอบเหล่านั้นและพิสูจน์คุณสมบัติของมัน (หรือรายงานข้อผิดพลาดที่อาจเกิดขึ้น) คุณไม่ต้องเสียเวลาหรือพื้นที่โค้ดในการเข้าถึงหน่วยความจำที่ผิดพลาดหรือจำนวนเต็มมากเกินไปเพราะมันได้รับการพิสูจน์แล้วว่าไม่เคยเกิดขึ้น
แม้ว่าจะมีงานที่เกี่ยวข้องกับ SPARK มากขึ้น แต่ประสบการณ์แสดงให้เห็นว่าสามารถรับผลิตภัณฑ์ได้เร็วขึ้นและราคาถูกลงเพราะคุณไม่ได้ใช้เวลาไล่ตามการรีบูตลึกลับและพฤติกรรมแปลก ๆ
การเปรียบเทียบ MISRA-C และ SPARK