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
:
Bearbeitet durch User
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.