www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keine Warnung wenn Prog. Speicher voll?


Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Optimi...
beschreibt mögliche Parameter für die Optimierung.
-Os -fweb -frename-registers -ffast-math
dürfte so ziemlich den kompaktesten Code erzeugen.

Autor: michi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ersetzen von int durch uint8_t hat einiges gebracht, aber für meine
vorhaben reicht der restliche Speicherplatz nicht mehr.
Besetzt INT nicht genauso ein Byte wie uint8_t ???

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, int hat mindestens 16 Bit.

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in tasten() liest du ein Bitmuster ein
78h,74h.. => invertiere das ganze und verwende es gleich als
"Tasten"-code (Zum Speichern brauchst du ja sowieso ein uint8)
Gruss

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: michi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UUPS erwischt - bin leider kein AVR-Programmierer
aber wenn dieses MAKRO einen einzelnen Maschinencode
erzeugt dann JA!!


Gruss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.