www.mikrocontroller.net

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


Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AREA

Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...oder damlas gabs auch "relocatoren". Gibts sowas für ARM7 Binaries 
auch?

Autor: Greg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tippgeber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ARM Assembly Language (Knaggs & Welsh - Bournemouth Univ.)

http://www.eng.auburn.edu/~nelson/courses/elec5260...

Autor: Greg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.