www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAR Workbench: Startadresse des Programms festlegen


Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

kann mir jemand von euch sagen, wo ich die Startadresse vom C-Programm 
(main) einstellen kann? Ich verwende einen AT91SAM7S256.

main
{
    ...
}

Vielen Dank
Peter

Autor: Rudi Mentär (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RTFM!

Autor: ABC (Gast)
Datum:

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

Autor: peter (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch das geht über die Linkerkonfiguration.

Allerdings: Wozu soll das ganze gut sein?

Autor: Peter (Gast)
Datum:

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

Autor: Jürgen K. (Gast)
Datum:

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

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.