Dir ist ja klar, daß du ein Großteil des Flash mit Strings vollhaust, gleiches gilt für den SRAM. Du hast hier eine kleinen ATmega8 vor dir, kein PC mit 1GB Hauptspeicher und nem virtuellen Speicher von oo.
Den Platz, den das Programm belegt, kannst du mit avr-size anzeigen lassen. Wie das geht erzählt dir
avr-size --help
Allein die main() hat riesiges Sparpotential!
Die Multiplikationen mit 0,75 machen nicht das, was du willst!!!
https://www.roboternetz.de/wissen/in...._in_Konstante
Eine Multiplikation mit 0.75 wirst du auch nicht wollen, weil das dem ATmega8 erst recht den Boden raushaut. Also: Multipliziere mit 3 und teile dann durch 4 (gcc ist übrigens gescheit genug, um /4 durch einen Shift zu ersetzen).
Die beste Oprimierungsstufe für AVR ist -Os
Falls das RAM voll mit den Strings ist, dann legt die ins Flash und schreibt euch ne Funktion, die die Strings aus dem Flash ausgibt (merke: konstante Strings im RAM belegen Platz um RAM *und* im Flash).
https://www.roboternetz.de/wissen/in...ings_ins_Flash
Die Länge zu übergeben braucht bei jedem Aufruf nochmal 4 Bytes unnötig... und und und...
Lesezeichen