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?
Ich verstehe das nicht. Der Rambereich für diesen Typ beginnt bei 0x060
und der Heap bei 0x015F. Die Daten (0xaa) im Hex File, müsste ich doch
mit dem Hex Viewer sehen können oder nicht?
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 AVR2
Byte groß ist.
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?
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
>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.
Außerdem macht es keinen Sinn, ein Hex-File mit einem Hexeditor zu
öffen. Das ist nämlich eine Textdatei. Die sollte man lieber in einem
Texteditor öffnen.
>holger schrieb:>> Na gut, auch ganz rechts ist kein AA zu sehen.>ldi r24, 0xAA --> 8a ea
He, he, Der Assembler baut seine Opcodes ja echt fies
zusammen;)
Vielen Danke für eure Unterstützung. So ganz steige ich noch nicht
durch.
Ich kann nicht nachvollziehen, ob nun an der Adresse 0x60 der Wert steht
oder nicht.
// 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.
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.