Hallo NG, wie mache ich denn sowas in der Art: unsigned char memory[0x10000] @ 0x202000; So dass wenn ich z.B. memory[1] = 0xff; im Programm schreibe dann effektiv an 0x202001 der Wert 255 geschrieben wird? Vielen Dank für jeden Tip! Peter
Ganz einfach:
1 | unsigned char *memory = 0x202000; |
Hallo Andreas B., kannst Du mir bitte noch sagen, ob es auch möglich ist, bestimmte Daten schon beim Compilieren an die richtige Stelle zu legen z.B. unsigned char* = "hallo welt" @ 0x203000; so dass der Compiler den Text automatisch in der Binärdatei an Offset 0x1000 hängt, falls der Programmstart bei 0x202000. Also wenn ich die bin-Datei nach 0x202000 lade automatisch bei 0x203000 "hallo welt" steht. Danke schon mal. Peter
> ob es auch möglich ist, bestimmte Daten > schon beim Compilieren an die richtige Stelle zu legen Das ist möglich, wird aber in der Regel über ein Linkerskript erledigt. Näheres steht in der Dokumentation des C-Compilers.
Das wird dann schon komplizierter, das muss man im Linker Script einstellen. Der Compiler allein kann das nicht, wenn mehrere Quelldateien gelinkt werden bzw. nur, wenn die Datei mit der speziellen Variable an erster Stelle gelinkt wird. Und dann ist RAM-Start bis Adresse der Variablen verschwendet. Also: Ist das überhaupt nötig und den Aufwand wert? Kurz zusammengefasst wäre es nötig, die Variable in eine spezielle Sektion zu legen — etwa mit __attribute__((section(".data.helloworld"))) im Fall gcc/binutils — und im Script dieser Sektion die richtige Adresse zuzuweisen. Dann bleibt noch die Frage, ob ins .data integrieren (dann wird der Abstand aufgefüllt, Startup-Code bleibt gleich) oder nicht (Startup muss modifiziert werden, dafür braucht man im ROM keinen Platz für Füllbytes). In beiden Fällen bleibt das Problem, dass es nicht passt wenn das restliche .data nicht zwischen Anfang und Variable passt… Also doch etwas komplizierter.
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.