Eine alternative Sichtweise: Mikrocontrollern geht der Speicher nicht aus.
Zumindest nicht, wenn es richtig programmiert ist. Das Programmieren eines Mikrocontrollers ist nicht mit dem Programmieren für allgemeine Zwecke vergleichbar. Um dies richtig zu tun, müssen Sie sich seiner Einschränkungen bewusst sein und entsprechend programmieren. Dafür gibt es Tools. Suchen Sie sie heraus und lernen Sie sie - zumindest, wie Sie Linker-Skripte und Warnungen lesen.
Wie Majenko und andere sagen, kann ein schlecht programmierter Mikrocontroller zu wenig Speicher haben und dann irgendetwas tun, einschließlich einer Endlosschleife (die dem Watchdog-Timer zumindest die Möglichkeit gibt, ihn zurückzusetzen. Sie haben den Watchdog-Timer aktiviert, nicht wahr? )
Gemeinsame Programmierregeln für Mikrocontroller vermeiden dies: Beispielsweise wird der gesamte Speicher entweder auf dem Stapel oder statisch (global) zugewiesen. "new" oder "malloc" sind verboten. Dies gilt auch für die Rekursion, sodass die maximale Tiefe der Unterprogrammverschachtelung analysiert und so angezeigt werden kann, dass sie in den verfügbaren Stapel passt.
Auf diese Weise kann der maximal erforderliche Speicherplatz berechnet werden, wenn das Programm kompiliert oder verknüpft wird, und mit der Speichergröße (häufig im Linker-Skript codiert) für den bestimmten Prozessor verglichen werden, den Sie als Ziel festlegen.
Der Mikrocontroller verfügt dann möglicherweise nicht über genügend Arbeitsspeicher, Ihr Programm jedoch möglicherweise. Und in diesem Fall kommen Sie zu
- schreiben Sie es um, kleiner, oder
- Wählen Sie einen größeren Prozessor (diese sind häufig mit unterschiedlichen Speichergrößen erhältlich).
Ein allgemeines Regelwerk für die Mikrocontroller-Programmierung ist MISRA-C , das von der Automobilindustrie übernommen wurde.
Aus meiner Sicht wird empfohlen, die Teilmenge SPARK-2014 von Ada zu verwenden. Ada zielt tatsächlich ziemlich gut auf kleine Steuerungen wie AVR, MSP430 und ARM Cortex ab und bietet von Natur aus ein besseres Modell für die Mikrocontroller-Programmierung als C. SPARK fügt dem Programm jedoch Anmerkungen in Form von Kommentaren hinzu, die beschreiben, was das Programm tut.
Jetzt analysieren die SPARK-Tools das Programm, einschließlich dieser Anmerkungen, und beweisen Eigenschaften darüber (oder melden potenzielle Fehler). Sie müssen weder Zeit noch Codeplatz für fehlerhafte Speicherzugriffe oder Integer-Überläufe verschwenden, da sich herausgestellt hat, dass dies niemals der Fall ist.
Obwohl SPARK mehr Vorarbeit leistet, kann es erfahrungsgemäß schneller und billiger zu einem Produkt kommen, da Sie keine Zeit damit verbringen, mysteriöse Neustarts und andere seltsame Verhaltensweisen zu verfolgen.
Ein Vergleich von MISRA-C und SPARK