Forum: Mikrocontroller und Digitale Elektronik Speicherproblem mit Atmega64


von Andreas S. (schunki)


Lesenswert?

Hallo zusammen!

Ich hatte in der vergangenen Woche ein etwas merkwürdiges Problem beim 
Simulieren eines Atmega64 über den AVR-Simulator des AVR Studios 6.1. 
Hierbei wurde eine For-Schleife zwar richtig abgearbeitet (3x durch und 
dann raus) aber die dazugehörige Zählvariable blieb im Simulator immer 
auf NULL stehen. Bei genauerer Betrachtung ist mir dann aufgefallen, 
dass sich nicht nur die Zählvariable merkwürdig verhält sondern auch 
andere Variablen in dieser Funktion.
Da ich in dieser Funktion unter anderem ein 3x3 Aray und ein 5x5 Aray 
angelegt hatte viel mir dann irgenwann auf, dass ich bei einem 3x3 und 
einem 2x2 Aray diese Probleme noch nicht habe. Bei vergrößerung des 
letzten Arays auf 2x3 war es aber dann wieder da. Hierbei stellte ich 
fest, dass meine Variablen einmal in den Speicherbereich 0x1... 
geschrieben wurden (alles ok) und beim anderen mal in dem Bereich 
0x0F... landeten (Auftreten des Problems).

Nach der Auseinandersetzung mit dem Datenblatt des Atmnega64 viel mir 
dann auf der Seite 20 eine Grafik ins Auge, die den Atmega64 in zwei 
unterschiedlichen Konfigurationen zeigt. Einmal A und einmal B wobei bei 
der Konfiguration genau an der o.g. Stelle eine Grenze zwischen externem 
und internen SRAM ist. Allerdings habe ich gar kein externes SRAM 
angeschlossen. Demnach müsste es doch eigentlich gerade anders herum 
nicht funktionieren, also bei 0x0F... müsste dann noch alles gut sein 
während ich beim Wechsel in den Speicherbereich des nicht vorhandenen 
Externen SRAMS mit Problemen rechnen würde. Habe ich hier einen 
Denkfehler? Oder verstehe ich das Datenblatt falsch? Und vor allem - Wo 
stellt man die Konfiguration A oder B ein? Da bei der Auswahl des 
Devices unter Atmega64 immer 4096 angezeigt wird, würde ich hier sowieso 
eher die Konfiguration A vermuten!

Fragen über Fragen! Aber ich hoffe, ich finde hier ein paar passende und 
erklärende Antworten. Dafür schon einmal im Voraus vielen Dank!


Gruß
Andreas

von Falk B. (falk)


Lesenswert?

@ Andreas S. (schunki)

>unterschiedlichen Konfigurationen zeigt. Einmal A und einmal B wobei bei
>der Konfiguration genau an der o.g. Stelle eine Grenze zwischen externem
>und internen SRAM ist.

Genau.

>Denkfehler? Oder verstehe ich das Datenblatt falsch? Und vor allem - Wo
>stellt man die Konfiguration A oder B ein?

Kombtibilitäts-Fuse.

von Andreas S. (schunki)


Lesenswert?

Naja..... beantwortet immerhin mal die Frage wie man die Konfiguration 
umschaltet. Bleibt noch offen warum ich dieses Verhalten habe und warum 
es nicht andersherum ist sowie wie das ganze zu Stande kommt.

von Andreas S. (schunki)


Lesenswert?

Sorry, aber ich muss hier nochmal nach haken, ob mir hier noch jemand 
etwas mehr weiter helfen kann.

Warum hab ich das Problem nicht, wenn meine Variablen im Speicherbereich 
0x1... liegen. Dies ist gem. Datenblatt der Speicherbereich des externen 
SRAMs, was bei mir nicht vorhanden ist. Für mich wäre es erklärbar, wenn 
bei der Adressierung in diesen Bereich dann etwas schief geht. Aber hier 
funktioniert es und im Speicherbereich 0x0F... tritt dann der Fehler 
auf!

Warum????

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Andreas,

wenn ich es richtig verstanden habe, legst Du die Arrays auf dem Stack 
an. Der Compiler kann dann keine vollständige Prüfung auf die maximale 
Größe durchführen. Du solltest also den Speicherbedarf Deines Programms 
im Falle des Fehlers ausrechnen. Für diese Erklärung spricht auch, dass 
Dein Programm mit kleineren Arrays läuft.
Eine relativ einfache Möglichkeit zum Test ist die Anlage der Arrays 
ausserhalb der Funktion. Das geht natürlich nur, wenn keine rekursiven 
Aufrufe erfolgen. Und vergiss nicht, dass auch Interrupts eventuell 
Speicher benötigen.

Grüße, Kurt

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.