extended IO Atmega48

OP #3091450
Hallo,
ich versuche jetzt schon eine ganze Zeit herauszufinden, warum meine 
Zuweisung für zwei Variablen im C-Code mal läuft und an anderer Stelle 
nicht. Beide Variablen werden wie folgt initialisiert:

unsigned char cmd_00[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
unsigned char cmd_01[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};

Der Unterschied besteht scheinbar in den vom Compiler für die Variablen 
vorgesehenen Adressen:

cmd00 -> 0x02E5 [SRAM], Data
cmd01 -> 0x00E1 [SRAM], Extended I/O

Wenn der Code im AVR-Studio Simulator2 oder auf dem Target (Atmega48) 
ausgeführt wird lässt sich im zweiten Fall keine Änderung der 
betreffenden Speicherstelle beobachten. Mit dem alten Simulator 
funktioniert es aber. Irgendwelche Ideen was ich da falsch mache?
OP
Danke für deinen Tip lippy.
Hat mir aber nicht geholfen.
Ich habe versucht mein Problem zu reduzieren und wollte mal hören, ob 
vielleicht jemandem was dazu einfällt. Ich kann aber gerne nochmal das 
Disassembly der Zuweisungen mit den initialen Werten posten, wenn du 
dann erst deine volle Kompetenz enfalten kannst.
Gast
>warum meine Zuweisung für zwei Variablen im C-Code mal läuft und an anderer 
>Stelle nicht.

Und warum tust du uns diese Zuweisungen vorenthalten? Wir sollen doch 
sagen, warums nicht geht...


>Ich kann aber gerne nochmal das  Disassembly der Zuweisungen

Nein. Den originalen Code.
OP
Ich weiss nicht, ob es hilft, wenn ich den code soweit reduziere dass 
man es hier darstellen kann und ob dann das Problem noch besteht.
Der Code ist ursprünglich auch garnicht von mir. Ich versuche eine 
SD-karte zu lesen und benutze dabei die Sourcen von Ulrich Radig 
("mmc.c").

Ich werde erstmal mal nachstellen, ob ich nur mit dem Disassembly der 
beiden Zuweisungen und entsprechend initialisierten Registern das 
gleiche Problem bekomme ...
OP
ldi r28, 0xDA
ldi r29, 0x02

movw  r24, r28
adiw  r24, 0x05
std  Y+21, r25
std  Y+20, r24
; ...
; ...

ldi r28, 0xE0
ldi r29, 0x00

movw  r24, r28
adiw  r24, 0x01
std  Y+14, r25
std  Y+13, r24
; ...
; ...

im extended I/O sehe ich nicht, dass der Speicher geändert wird
Gast
Sorry, aber wenn Du nicht kapieren willst, das wir dir nur helfen 
können, wenn Du uns den Code zeigst, der angeblich/scheinbar nicht geht, 
dann tut es mir leid.

Dir ist so nicht zu helfen..
OP
Falls es noch jemand interessieren sollte:
Das RAM des ATmega48 ist für eine direkte Nutzung des Codes von Ulrich 
Radig zu klein. Wenn man das Programm anpasst tritt auch der Effekt 
nicht mehr auf, dass Variablen an die oben genannten Speicherstellen 
geschrieben werden.
(Danke Peter)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.