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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.