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?
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.
>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.
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 ...
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
Daniel Capelle schrieb: > cmd00 -> 0x02E5 [SRAM], Data > cmd01 -> 0x00E1 [SRAM], Extended I/O Variablen haben im IO nix verloren. Da ist irgendeine Einstellung in Deinem Make falsch. Und 0x02e5 ist auch nicht koscher. Da bleibt verdammt wenig für den Stack übrig bis 0x02FF.
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..
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)
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.