mikrocontroller.net

Forum: Compiler & IDEs ATMEGA128 Code größer als 64KB???


Autor: Arthur Dent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo in die Runde,

ich habe gerade die 64KB Schallmauer mit meinem Programm durchbrochen 
und jetzt passieren ganz komische Sachen ;-)

Ich dacht der ATMEGA128 kann 128KB Programme vertragen???

Ich benutze die WINAVR-IDE 20060421 und die generiert beim comilieren 
keine Fehlermeldung…

Habe ich eine Einstellung im Makefile vergessen???

Kann mir jemand weiter helfen?

Danke schon mal im Voraus.

Autor: unbeschreiblicher Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich dacht der ATMEGA128 kann 128KB Programme vertragen???

Steht in der Regel ziemlich am Anfang des Datenblattes:
128K Bytes of In-System Reprogrammable Flash

Sollte also gehen.
Der avr-gcc spuckt doch die Speicherbelegung in Prozent aus...(zumindest 
bei mir...)

Autor: unbeschreiblicher Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>jetzt passieren ganz komische Sachen ;-)

Inwiefern?

Autor: unbeschreiblicher Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich empfehle dir den Abschnitt "AVR ATMEGA128 Memories" (Seite 18 im 
Datenblatt)!

Autor: Arthur Dent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rahul!!!

jetzt passieren ganz komische Sachen ;-):
ich habe in meinem Programm eine große if, else if, else Schleife.

Solange mein Programm kleiner als 64kb ist klapp alles prima.
Ist das Programm größer vergisst der avr „einige else if“ abzufragen und 
geht gleich zu else…

Danke für den Tip mit seit 18… Habe ich natürlich auch schon gelesen.
Hilft mir aber irgendwie nicht wirklich weiter…
Schafft der Compiler es nun Programme Größer als 64kb in den 
Word-organisierten Speicher zu schreiben??

Danke für diese und nachfolgende Antworten

Autor: Arthur Dent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rahul!!!

Noch mal danke für deine Antwort. Am Speicher scheint es wirklich nicht 
zu liegen.
Habe gerade mal ein neues Programm geschrieben
(mit ganz viel printf(„blaundblub“))
Das klappt auch wenn es riesig ist. :-(

Da muss wohl murks in meinem Programm in der isr Routine sein…

Gruß

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne ja das Programm nicht...und >64KB möchte ich mir jetzt auch 
ersparen, aber ich würde spontan auf nen falschen jump-Befehl tippen. 
Evtl liegen isr und die besagte Stelle zu weit auseinander.

Schau dir mal die Befehlsreferenz an.

Autor: hereinspaziert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm...if..else...klingt nach C...
okay, da bringen dir andere jumps auch nichts...sorry

Autor: Markus Gronotte (happyhippo4u)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Arthur Dent.

Sind die if then dinger denn verschachtelt? Falls ja, darfst du nicht 
vergessen, dass jede if else verschachtelung einen Stack erzeugt und 
wenn der Platz nicht mehr reicht gibt es Fehler oder Überläufe oder was 
auch immer.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dass jede if else verschachtelung einen Stack erzeugt
Seit wann? Verzweigungen wie if-Abfragen haben mit dem Stack nichts zu 
tun! Das sind bedingte Sprünge, bei denen keine Rücksprungadressen 
abgelegt werden (warum auch, es wird ja nicht zurückgesprungen). Und 
dann auch noch gleich einen ganzen Stack "erzeugen"... was auch immer 
das heißen soll.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein das du dein Programm in Singlestep durchstepst und dabei 
fällt dir auf, dass einige Zweige übersprungen werden? Wenn ja, der 
C-Compiler hat einen Optimierer. Alles was nicht mit O0 compiliert ist 
wird optimiert.
Wenn du if then else if else machst und Bedingungen schon erfüllt sind 
im übergeordneten Zweig kann er den Programmcode umordnen (das ergebnis 
bleibt gleich). Ich denke deshalb kommst du ins stolpern beim debuggen.
Andere Möglichkeit: du hast falsch geklammert

Nebenbei: bei solchen tiefverschachtelten if then ... leidet die 
Übersichtlichkeit, wenn es sich nur auf eine Variable bezieht, kann man 
durch select case einiges erreichen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johnny.m wrote:

>> dass jede if else verschachtelung einen Stack erzeugt

> Seit wann?

Markus-Definition.  Kannste dir in den Annalen von de.sci.electronics
genug dazu ansehen.  Sowie er denkt, dass er was verstanden hat,
verkauft er es sofort dem Nächsten als bare Münze. ;-)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg:
Aah so. Dann ist alles klar. Hatte mich schon gewundert, dass 
anscheinend eine ganze Reihe der regelmäßigeren Forumsgäste Markus gut 
zu kennen scheinen. Ich bin dagegen bisher eher vorurteilsfrei auf ihn 
eingegangen, da ich mich in der Regel nicht in anderen Foren rumtreibe 
und ich ihn einfach für einen unbedarften Anfänger hielt...

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.