Forum: Mikrocontroller und Digitale Elektronik extended IO Atmega48


von Daniel C. (hypnoticum)


Lesenswert?

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?

von Matthias L. (Gast)


Lesenswert?

Der Fehler ist im Programmcode auf Zeile 42.

von Daniel C. (hypnoticum)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

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

von Daniel C. (hypnoticum)


Lesenswert?

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

von Daniel C. (hypnoticum)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

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

von Daniel C. (hypnoticum)


Lesenswert?

ich wünsch dir noch nen schönen tag lippy ...

von Daniel C. (hypnoticum)


Lesenswert?

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
Noch kein Account? Hier anmelden.