Maximale Programmgröße

Aufgrund einer Fehlfunktions eines Roboters ergab sich neulich die Frage, wie groß das Programm unserer Roboter eigentlich maximal sein darf, damit es noch fehlerfrei arbeitet.

Das hängt natürlich zuerst vom verwendeten Mikrocontroller ab. Bei uns ist das ein ATtiny44A von Microchip (früher Atmel). Dieser hat eine Flash-Speichergröße von 4 Kilobytes, also 4096 Bytes; in Hexadezimaldarstellung 0x1000.

Allerdings verwenden wir einen Bootloader, über den sich das Programm einfach über die Serielle Schnittstelle, also unser Programmierkabel, aufspielen lässt. Dieser Bootloader muss dauerhaft im Flash-Speicher bleiben und benötigt schon alleine ein Kilobyte für sich, also bleiben für unser Programm nur 3 Kilobyte übrig, also hex 0x0C00.

Das reicht für unsere Zwecke im allgemeinen aus. Es könnte jedoch dann knapp werden, wenn wir viele alte „Programme“ als eigene Befehle speichern. Auch wenn wir diese nicht mehr wirklich aufrufen, verbrauchen sie doch den kostbaren Speicher.

Sollte es also eng werden, können wir nicht mehr benötigte Befehle mit:

#if 0

und

#endif

umschließen, dann werden sie vom Compiler wie Kommentare behandelt, also nicht übersetzt.

Aber woran kann man erkennen, dass das Programm zu groß wird? Leider warnt uns der Compiler beim Aufruf von „Tools->Make All“ nicht, denn unverständlicherweise geht er von einem maximalen Speicher von 8 Kilobytes aus. Aber spätestens beim Flashen („Tool->Program“) bekommen wir folgende Fehlermeldung, wenn außerhalb des erlaubten Bereichs geschrieben werden soll:

Bitte Zielsystem einschalten!
loeschen:
File einlesen:
First = 0x0000, Last = 0x0C0B
flashen:
Exception: Fehler-Antwort auf WRITEFLASH: 3

Wenn man näher hinsieht, kann man auch an der Ausgabe mit „Last =“ sehen, wie groß das Programm tatsächlich ist, und zwar in Hexadezimaldarstellung. Im Beispiel sieht man also, dass das Programm um 0x000B, also 11, Bytes zu groß ist.

Wir können also sicher sein: wenn das Programm ohne Fehlermeldung geflasht wurde, dann funktioniert es auch so, wie wir es programmiert haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert