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.
>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...)
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
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ß
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.
hmm...if..else...klingt nach C... okay, da bringen dir andere jumps auch nichts...sorry
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.
> 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.
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.
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. ;-)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.