Ich kenne die Software von IAR. Dort hat man die Möglichkeit ein
Linkerfile zu erstellen (.xcl). In diesem Linkerfile sieht es z.B. so
ähnlich aus:
// Grenzen für die Applikation definieren
-D_..X_APL_CODE_START=5600 // Start des Applikation -Code
-D_..X_APL_CODE_END=6FFF // Ende des Applikation –Code
// Grenzen für den Savecode definieren
-D_..X_SAVE_CODE_START=7000 // Start des Save-Code
-D_..X_SAVE_CODE_END=78FF // Ende des Save-Code
// Grenzen für Applikations- Daten
-D_..X_APL_DATA_START=100 // Start der Applikation Data
-D_..X_APL_DATA_END=800 // Ende der Applikation Data
// Bereich für Applikation definieren
-Z(CODE)APL_CODE=(_..X_APL_CODE_START)-(_.. X_APL_CODE_END)
// Bereich für den Save- Code
-Z(CODE)SAVE_CODE=(_..X_ SAVE_CODE_START)-(_.. X_ SAVE_CODE_END)
// Bereich für die Daten der Applikation definieren
-Z(DATA)APL_DATA=(_..X_ APL_DATA_START)-(_..X_ APL_DATA_END)
Dann hat man im Quellcode die Möglichkeit die Daten und Funktionen an
die definierten Stellen im µC zu platzieren:
unsigned char data @"APL_DATA";
void functions_init(void)@"APL_CODE"
{ …}
void main(void)@" APL_CODE "
{…}
void save_init(void)@" SAVE_CODE "
{…}
Jetzt arbeite ich auch mit dem ATMEL Studio6. Dort würde ich genauso
solche Bereiche definieren. Ich habe schon etwas im I-Net gesucht aber
ich habe nichts Brauchbares gefunden. Ich habe das Dokument: “The GNU
linker“ durchgelesen. Ich gehe davon aus, dass dies schon möglich ist
aber ich konnte keine passenden Beispiele finden. Ich gehe davon aus,
dass man die Grenzen im Studio6 unter „Projekt-
Properties/Toolchain/AVR/GNU Linker/Memory Settings“ definieren muss.
Wie verwendet man dann aber die Definitionen im Quellcode?
Kann mir jemand hier im Forum weiter helfen?
Viele Grüße
Im Linker Script ( https://sourceware.org/binutils/docs-2.24/ld/Scripts.html#Scripts ) kannst du Sections definieren und diese nacheinander in den Flash packen, z.B.:
1 | .mysection : |
2 | {
|
3 | . = ALIGN(4); |
4 | KEEP(*(.mysection)) // dein zeug |
5 | . = ALIGN(4); |
6 | } >FLASH |
7 | |
8 | .text : |
9 | {
|
10 | . = ALIGN(4); |
11 | *(.text) // normaler Programmcode |
12 | } >FLASH |
Im Code kannst du dann bei Funktionen und Variablen mit
__attribute__((section(".mysection"))) in eben diese Section packen. Mit
dem ". = " operator kannst du die Adressen in der Ausgabe manipulieren.
Hallo Dr. Sommer ;o) Danke für Deine Antwort. Ich habe jetzt auch noch mal die Atmel-Application Note "AVR32795" (Using the GNU Linker) gelesen. Das ist zwar für den AVR32 geschrieben aber ich denke das wird ähnlich sein. Darin ist beschrieben, dass man das Linker-Sktipt in sein aktuelle Projekt kopieren sollte, wenn man noch eigene Bereiche definieren möchte. Jetzt habe ich das Problem, dass ich das allgemeine Linkerfile nicht finden kann. Ich habe zwar im Unerordner "Atmel" nach ".ld" gesucht, allerdings gibt es da sehr viele Dateien. Welches sollte ich den als Vorlage verwenden? Grüße (",)
Marcel K. schrieb: > Welches sollte ich > den als Vorlage verwenden? Keine Ahnung wie das bei dem Atmel Gedöns organisiert ist, vielleicht gibts da ja eines das so heißt wie dein Ziel-Controller. Du musst jedenfalls beim Linken mit dem "-T" Flag dem Linker/GCC das Linkerscript angeben.
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.