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
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.
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
Auch das geht über die Linkerkonfiguration. Allerdings: Wozu soll das ganze gut sein?
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
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
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.