Hello again :-) ich habe ein kleines Problem: Bisher habe ich ein paar Sachen geschrieben, die liefen immer ganz gut, egal, an welche Adresse ich das Zeug hingeladen habe (z.B. 0x202000). Das liegt wohl daran, dass nur relative Sprünge verwendet wurden. Jetzt würde mich doch brennend interessieren, wer dafür verantwortlich ist, dass ein Programm an einer bestimmten Adresse läuft. Das sollte doch der Linker tun, oder? Wo nehme ich die Einstellung typischer Weise vor, welche Startadresse das Programm haben soll? Ich verwende IAR Workbench. Vielen Dank für jeden Tip! Peter
... früher auf dem C64 gabs doch soweit ich mich noch erinnern kann zu Begin eines ASM-PRGs immer sowas wie *=$c000 um die Startadresse festzulegen. Soetwas in der Art suche ich.
Also AREA habe ich jetzt auf die schnelle gar nicht gefunden :-( Vielleicht ein Beispiel, um was es mir geht: tbl_hex: dc8 "0123456789ABCDEF" dc32 tbl_hex Nach den Hex-Werten sollte im dc32 die Adresse von tbl_hex stehen. Also wenn das alles an 0x202000 anfängt, sollte da unten 0x202000 stehen...
...oder wenn ich ein C-Programm habe: Das läuft doch in der Regel auch nur, wenn man es an eine bestimmte Adresse läd, oder? Wo lege ich diese Adresse fest?
...oder damlas gabs auch "relocatoren". Gibts sowas für ARM7 Binaries auch?
Hallo Peter, im Linker-Skript wird das festgelegt. Du legst dort fest, an welcher Adresse dein Programm beginnt (z.B. 0x202000 oder 0x0, falls ROM), wo der Compiler die Variablen speichert und wo dein Stack liegt. Die Programmierung des ARMs in Assembler hatte ich zwar versucht, aber mangels Literatur wieder auf Eis gelegt. Es gibt eine Direktive "org", je nach Assembler kann sie auch anders lauten. Damit wird angegeben, wo der Speicherbereich liegt. Bei den Atmel-AVR gibt es ".cseg"... Ich glaube mich erinnern zu können (warst du das damals?), auf so eine (ähnliche) Fragestellung geantwortet zu haben. Gruß, Greg.
>Du legst dort fest, an welcher Adresse dein Programm beginnt (z.B. >0x202000 oder 0x0, falls ROM), wo der Compiler die Variablen speichert >und wo dein Stack liegt. Wenn Du hier von ROM sprichst, meinst Du dann den Flash-Speicher?
ARM Assembly Language (Knaggs & Welsh - Bournemouth Univ.) http://www.eng.auburn.edu/~nelson/courses/elec5260_6260/ARM_AssyLang.pdf
>>Du legst dort fest, an welcher Adresse dein Programm beginnt (z.B. >>0x202000 oder 0x0, falls ROM), wo der Compiler die Variablen speichert >>und wo dein Stack liegt. > >Wenn Du hier von ROM sprichst, meinst Du dann den Flash-Speicher? Ja.
also irgendwie bekomme ich es einfach nicht gebacken :-( ich muss entweder ein vorhandenes Binary disassemblieren, oder die Demo zu MMC/SD kompilieren. Ich will es aber so, dass es im RAM läuft. Was muss ich denn da alles anpassen? Und wie mir scheint funktioniert es ja nicht einmal, wenn ich das Teil so wie es im ZIP ist kompiliere und mit SAMBA "hochlade"... Mir würde es ja schon reichen, wenn die DEMO wenigstens läuft. Aber so weiß ich nicht, wo der Fehler liegt... Verwendet denn niemand IAR Workbench und kann mir niemand einen kleinen Tip geben, wie ich die TCL-Datei konfigurieren muss?
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.