2013-07-12 2 views
0

Je suis déçu, car je ne trouve pas d'informations sur la segmentation de la mémoire. Je sais que je devrais diviser la mémoire en sections de base telles que .text, .data, .bss, .stack, qui sont utilisées dans les fichiers objets du programme compilé. Je sais qu'il y a beaucoup plus d'autres sections, certaines sont nécessaires pour C et d'autres pour C++. Je recherche des informations sur, quelles sections devraient être incluses dans le script de l'éditeur de liens?Sections de mémoire dans le script de l'éditeur de liens GNU pour Cortex-M4

Répondre

2

Il dépend de votre architecture de compilateur et cible spécifique quelles sections de sortie seront présentes ou éventuellement présentes. Et dans votre code, vous pouvez définir des sections d'entrée avec des noms arbitraires. Votre script d'éditeur de liens permet de lier des symboles à partir de fichiers ou des symboles répertoriés dans des sections d'entrée définies explicitement aux sections de sortie. La meilleure façon de savoir quelles sections de sortie sont présentes est de simplement compiler et lier un exemple d'application, et d'inspecter le fichier de carte généré (si le fichier de carte n'est pas généré automatiquement, vous devez ajuster vos options de lieur). Un fichier de carte n'est pas destiné à être utilisé par un autre outil, mais sert de description lisible de ce qui se passe dans votre programme, sur quel emplacement, dans quelle section, et pourquoi. Remarque: dans ce fichier de carte, vous trouverez également des noms de sections qui ne font pas partie de votre programme et qui ne se traduiront pas par des bits physiques qui seront exécutés ou utilisés par votre programme, mais qui seront plutôt des aides pour votre débogueur.

Lorsque vous ne mappez pas explicitement certains symboles dans une section de sortie, l'éditeur de liens ajoute généralement tous les symboles restants après la dernière section explicitement définie.

Vous pouvez donc également définir une sorte de section "fourre-tout" qui attirera sûrement tous les symboles non encore assignés, puis vérifier si la section de sortie reste vide. -à-dire

A la fin de votre bloc SECTIONS, ajoutez

SECTION 
{ 
    <snip> 

    .mustbeempty 
    { 
    *(.*) ; 
    } 
    ASSERT(SIZEOF(.mustbeempty) = 0) ; 
} 

En savoir plus sur des scripts de liens peuvent être trouvés sur de nombreux endroits:

+0

+1 Pouvez-vous développer votre réponse? De plus, avez-vous des liens pour en savoir plus sur les scripts de liens? Merci. – Sabuncu

+0

Voir aussi ici: http://stackoverflow.com/q/12763041/911550 – parvus

Questions connexes