Wat is Linkerscript?
Bestand dat de linker instrueert op welke geheugenadressen elke sectie wordt geplaatst. Wordt bij embedded-ontwikkeling gebruikt om de plaatsing in flash en RAM en het adres van de interruptvector te bepalen.
Japanse benaming: リンカスクリプト
“Linkerscript” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Linker, loader en uitvoerbare formaten.
Vakgebied: Linker, loader en uitvoerbare formaten
Waarom embedded systemen er een nodig hebben
Op een pc bepaalt de loader van het besturingssysteem waar een programma in het geheugen staat, en een standaard-linkerscript werkt voor vrijwel alles. Een microcontroller zonder OS begint bij het inschakelen met uitvoeren vanaf vaste adressen, dus het programma moet voor de exacte geheugenindeling worden gebouwd. De interruptvectortabel moet staan waar de hardware haar verwacht, code en constanten horen in niet-vluchtig flashgeheugen, en beschrijfbare variabelen, de heap en de stack moeten in RAM staan. Verschillende chips uit dezelfde familie hebben vaak alleen een ander linkerscript nodig, omdat hun geheugengroottes verschillen.
Veelgestelde vragen
Waarvoor wordt een linkerscript gebruikt?
Een linkerscript vertelt de linker welke geheugengebieden er zijn en op welke adressen elke code- en datasectie moet worden geplaatst. Embedded projecten gebruiken het om code in flash, variabelen in RAM en de interruptvectortabel op het vereiste adres te zetten.
Wat is het verschil tussen .data en .bss?
.data bevat variabelen met een beginwaarde ongelijk aan nul, die in flash worden opgeslagen en bij het opstarten naar RAM worden gekopieerd. .bss bevat variabelen die op nul beginnen, dus neemt geen ruimte in flash in en wordt vóór main simpelweg in RAM leeggemaakt.
Waarom heeft .data twee adressen in een linkerscript?
De beginwaarden moeten in niet-vluchtig flashgeheugen worden opgeslagen, maar de variabelen worden tijdens runtime gewijzigd en moeten dus in RAM staan. Het laadadres wijst naar de kopie in flash en het uitvoeradres naar de plek in RAM die de code daadwerkelijk gebruikt.