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


von Arthur Dent (Gast)


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.

von unbeschreiblicher Rahul (Gast)


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...)

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>jetzt passieren ganz komische Sachen ;-)

Inwiefern?

von unbeschreiblicher Rahul (Gast)


Lesenswert?

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

von Arthur Dent (Gast)


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

von Arthur Dent (Gast)


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ß

von hereinspaziert (Gast)


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.

von hereinspaziert (Gast)


Lesenswert?

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

von Markus G. (happyhippo4u)


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.

von johnny.m (Gast)


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.

von Wolfram (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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. ;-)

von johnny.m (Gast)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.