Forum: Mikrocontroller und Digitale Elektronik Speicher für Programm festlegen: ARM7


von peter pippinger (Gast)


Lesenswert?

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

von peter pippinger (Gast)


Lesenswert?

... 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.

von Tippgeber (Gast)


Lesenswert?

AREA

von peter pippinger (Gast)


Lesenswert?

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...

von Peter Pippinger (Gast)


Lesenswert?

...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?

von Peter Pippinger (Gast)


Lesenswert?

...oder damlas gabs auch "relocatoren". Gibts sowas für ARM7 Binaries 
auch?

von Greg (Gast)


Lesenswert?

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.

von peter pippinger (Gast)


Lesenswert?

>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?

von Tippgeber (Gast)


Lesenswert?

ARM Assembly Language (Knaggs & Welsh - Bournemouth Univ.)

http://www.eng.auburn.edu/~nelson/courses/elec5260_6260/ARM_AssyLang.pdf

von Greg (Gast)


Lesenswert?

>>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.

von peter pippinger (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.