at90s8535 - auf ram zugreifen

Gast #2034364
Lesenswert?

Hallo,

ich möchte den Rambereich gezielt über eine Adresse ansprechen.
Beim at90s8535 beginnt der Rambereich ab der Adresse 0x60. Wenn ich den 
C-Code wie unten gezeigt übersetze, dann kann ich im HEX-File die Daten 
nicht erkennen. Die Daten (0xaa) müsste ich doch im HEX-File sehen 
können.

// write Data into RAM
*(volatile unsigned int*)0x60 = 0xaa;
*(volatile unsigned int*)0x61 = 0xaa;
*(volatile unsigned int*)0x62 = 0xaa;
*(volatile unsigned int*)0x63 = 0xaa;

Was mache ich möglicherweise falsch?
Gast #2034409
Lesenswert?

Leo schrieb:
> Die Daten (0xaa) müsste ich doch im HEX-File sehen
> können.
Am besten du schaust dir mal das Listing an. Dann weißt du ganz genau, 
was der Compiler damit macht. Das passiert bei mir:
1
*(volatile unsigned int*)0x1002 = 0xaa;
2
 124:  8a ea         ldi  r24, 0xAA  ; 170
3
 126:  90 e0         ldi  r25, 0x00  ; 0
4
 128:  90 93 03 10   sts  0x1003, r25
5
 12c:  80 93 02 10   sts  0x1002, r24

PS: Außerdem solltest du berücksichtigen, das Integer für den AVR 2 
Byte groß ist.
Gast #2034466
Lesenswert?

Danke für deine Info.

Das kommt bei mir raus:

// write Data into RAM
*(volatile unsigned char*)0x60 = 0xAA;
34:  8a ea         ldi  r24, 0xAA  ; 170
36:  80 93 60 00   sts  0x0060, r24
3a:  80 e1         ldi  r24, 0x10  ; 16
3c:  97 e2         ldi  r25, 0x27  ; 39

An welcher Adresse steht nun der 1Byte Wert 0xAA?
#2034476
Lesenswert?

Leo schrieb:
> // write Data into RAM
> *(volatile unsigned char*)0x60 = 0xAA;
> 34:  8a ea         ldi  r24, 0xAA  ; 170
> 36:  80 93 60 00   sts  0x0060, r24
> 3a:  80 e1         ldi  r24, 0x10  ; 16
> 3c:  97 e2         ldi  r25, 0x27  ; 39
>
> An welcher Adresse steht nun der 1Byte Wert 0xAA?

Gegenfragen:
Was macht die instruktion ldi?
Was macht die Instruktion sts?
Dann sollte es eigentlich klar sein.

Falls du aber Assembler-resistent sein solltest, dann hilft dir 
vielleicht die Simulation des Programmes.

PS:
Links im Listing steht die Programmspeicher-Adresse mit Opcode(s) (im 
hexfile wiederauffindbar). Rechts der Assemblerbefehl.

Gruß Skriptkiddy
Gast #2034488
Lesenswert?

>Das Hex File habe ich mal mit einem Hex Viewer analysiert.

Supi! Eine Hex Datei die aus ASCII Zeichen besteht im
HEX Viewer anschauen;) ROFL.

Na gut, auch ganz rechts ist kein AA zu sehen.

Nimm mal die RICHTIGE HEX Datei und schau da rein.
Gast #2034533
Lesenswert?

// write Data into RAM
*(volatile unsigned char*)0x60 = 0xAA;
34:  8a ea         ldi  r24, 0xAA  ; 170
36:  80 93 60 00   sts  0x0060, r24
3a:  80 e1         ldi  r24, 0x10  ; 16
3c:  97 e2         ldi  r25, 0x27  ; 39

Ich hab mal die Assembleranweisungen auf der Mikrocontroller.net Seite 
durchgelesen, da gibt es auch ein Beispiel:
http://www.mikrocontroller.net/articles/Adressierung

Der Wert 0xAA liegt somit im Register 0x0060.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren