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 AVR 2 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?
Das Hex File habe ich mal mit einem Hex Viewer analysiert. Ich kann den Wert 0xAA nicht finden.
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.
Leo schrieb: > Der Wert 0xAA liegt somit im Register 0x0060. Ab Adresse 0x0060 spricht man nicht mehr von Registern. Das ist RAM. Gruß Skriptkiddy
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.