ATMEGA128 Code größer als 64KB???

Gast #472577
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.
Gast #472586
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...)
Gast #472600
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
Gast #472655
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ß
Gast #472669
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.
Gast #478000
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.
Gast #478004
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.
Gast #478019
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

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