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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.