Keine Warnung wenn Prog. Speicher voll?

Gast #141875
Lesenswert?

Hi,
Bin in sachen c und winavr und ponyprog noch Anfänger. Hab mir jetzt
ein Programm für ein belichtungsgerät geschrieben, bin noch nicht
fertig aber die 2K vom 90s2313 sind schon voll. Bringt WINAVR nichtmal
eine Warnung wenn der MC voll ist? Das ist schwach! Hab es erst gemerkt
als bei ponyprog alles beschrieben war und mein Programm blödsinn
gemacht hat. Bringt PonyProg denn auch keine Warnung? Nur AVRStudio
meckert. Bin enttäuscht!
Wie ist das, gibt es in WINAVR noch irgendwelche Einstellungen die mein
Programm kleiner machen?
mfg
Gast #141876
Lesenswert?

Prinzipiell hast Du recht, daß es nicht so schön ist, wenn man keine
Warnung bekommt. Aber bedenke mal, daß die Software, die Du benutzt,
kostenlos ist. Das heißt: Irgendjemand hat einfach mal so seine
Freizeit geopfert.
WINAVR gibt während des Compiliervorgangs im make-Fenster auch die
Codegröße an.
Kleiner bekommst Du den Code, indem Du ihn effektiver machst... Es gibt
wohl auch verschiedene Optimierungsparameter, aber da kennen sich andere
sicher besser aus, als ich.
Gast #141878
Lesenswert?

Hi,
Ich hab mal mit verschiedenen Optimierungslevels, mit Makefile,
versucht die grösse zu drücken, bringt nicht viel.
Hab jetzt mal mein Programm mitgeschickt (nicht schlagen, ist alles
noch ein wenig chaos, und nicht dokumentiert) vielleicht hat jemand
Zeit sich das Ding mal anzuschauen. Hab bestimmt irgendein Fehler
gemacht, weil so lang ist die Source nicht.
mfg
Angehängte Dateien:
Gast #141879
Lesenswert?

Wie ich sehe verwendest du an vielen stellen int. Versuch mal wenn
möglich stattdessen uint8_t zu verwenden (deine Warteschleife könnte
dann allerdings zu schnell sein) und bei den Berechnungen eine Typecast
auf uint8_t . Generier mal das Assembler Listing. Da wirst du schnell
sehen welcher Teil besonders Codehungrig ist.
Gast #141883
Lesenswert?

Versuch case zu vermeiden und if.. else zu verwenden:
http://www.mikrocontroller.net/forum/read-2-65661.html#new
in laden() dürftest du das case durch
if ((pos != 0) && (pos < 8)) {
y = pos<<4;
}
ersetzen können
Ansonsten sind inp und outp sowie eeprom_read_byte übrigens veraltet:
http://www.mikrocontroller.net/forum/read-2-138701.html#new
Und im Notfall ließe sich info() einsparen ;-)
was für Routinen für das LCD verwendest du denn?
Gast #141884
Lesenswert?

@T.Stütz
Ich könnte besser mit "bit_is_clear" arbeiten, als immer den ganzen
Port abzufragen oder?

@malte
Verwende den Quellcode von Peter Fleury. Wobei ich sie ein wenig
ergenzt hab, weil mit die Darstellung von Integer Zahlen nicht gefallen
hat. Eine führende 0 wird vernachlässigt und das sieht doof aus wenn der
man eine zeit darstellen will.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren