IAR Workbench: Startadresse des Programms festlegen

Gast #1910469
Lesenswert?
• ▲
▼
oder schau dier die beispiele an,

kann mir nicht vorstellen, das IAR für den Baustein, oder einen seiner 
kleineren brüder nicht ein beispiel projekt beigelegt hätte.


und die main linkt man normalerweise sowieso nirgendwo hin. die wird vom 
cStartup.S irgend wann mal aufgerufen. und dafür das die cStartup.S 
ausgeführt wird, wird normalerweise schon im beispielprojekt gesogt.

Ich kann mir nur 2 möglichkeiten vorstellen.

1. erste gehversuche mit arm / IAR
-> beispielprojekt anschauen

2. du hast was ganz spezielles vor
-> linkerfile / RTFM aber das hättest du dan auch selber rauskriegen 
könne. IAR Installiert die alle mit. In pdf form. oder beim kauf in 
gedruckter version.
Gast #1910552
Lesenswert?
• ▲
▼
Aha, ok.

Kann mir jemand von euch sagen, ob ich z.B. auch ein Array definieren 
kann, das an einer bestimmen Stelle liegt? Also z.B. sowas in der Art:

0x202000 main ...
0x202500 'hallo'
0x202600 'welt'

Ich habe schon gesehen, dass man über "projekt->einstellungen->linker" 
Adressen eingeben kann. Aber wie funktioniert das mit mehreren 
Speicherbereichen? Muss ich Textdateien bearbeiten, oder geht das auch 
über Menüs aus der Workbench raus?

MfG
Peter
Gast #1910896
Lesenswert?
• ▲
▼
Hallo Rufus,

zunächst mal danke für die Antwort.

> Allerdings: Wozu soll das ganze gut sein?

Nunja ich habe da momentan mehrere Probleme, der AT91SAM7S256 hat ja 
256kb flash und 64kb SRAM.

1. Bestimmte Dinge möchte ich gerne im SRAM "veränderbar" halten. So 
könnte ich mir eben vorstellen, dass ein bestimmtes Array da dann an 
einer bestimmten Stelle liegt (z.B. 0x202000)

2. Ich habe auch das Problem, dass ich nicht weiß, wo mein C-Programm 
eigentlich seinen Einstiegspunkt hat. Wenn ich z.B. mein Hello World 
oder RS232-Programm (ASM) via SAM-BA an 0x202000 lade, dann funktioniert 
"go 0x202000. Aber mit C-Sourcen bekomme ich es irgendwie nicht hin. Und 
ich denke mal, dass man es nicht einfach irgendwohin laden kann ohne 
realloc, oder? Es sind doch bestimmt auch stellenweise absolute Adressen 
in den binären Dateien verwendet, oder?

Es wäre echt super nett, wenn Du mir da vielleicht noch den ein oder 
anderen Tipp hättest, nachdem Du ja scheinbar genau weißt, wo man da was 
einstellen muss...

Vielen Dank,
Peter
Gast #1911736
Lesenswert?
• ▲
▼
Hallo Peter,

arbeite jetzt zwar hauptsächlich mit dem IAR Compiler für Renesas, 
müsste aber äquivalent auch für den ARM IAR Compiler gelten.

1.) Du kannst im XCL File (Linker File) ein eigenes Segment definieren 
und anschließend im Quellcode eine Pragma-Anweisung (#pragma 
segment=mySegment) vor Deiner Array Definition setzen. Damit zwingst Du 
den Linker Dein Array im Segment und damit angegebenen Adressbereich 
anzulegen.

2.) Noch einfacher: Die IAR compilerspezifische @ Anweisung verwenden. 
Beispiel:

unsigned int myArray[255] @ 0x202000;

Damit wird das Array beginnend an der Adresse 0x202000 angelegt.

3.) Selber noch nicht getestet, müsste aber theoretisch funktionieren.
a) typedef definieren
b) pointer vom type Deines typedef anlegen
c) Pointeradresse (mit &) auf gewünschte Adresse setzen. (und hoffen, 
das der Linker nichts anderes an dieser Position gelegt hat :-)

a) und b) sind optional. Evtl. direkt mit Adresse mit &myArray zuweisen. 
Einfach mal test.

Viel Erfolg.

Jürgen

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.