Je travaille sur un projet IAR. Dans son fichier de configuration de l'éditeur de liens, un bloc est défini comme suit

define block MY_BLOCK with alignment = 32 { section myblock };
place in CODE_RAM { block MY_BLOCK };

Cela a créé un objet mémoire MY_BLOCK avec un alignement de 32 octets, qui est lié à la mémoire physique CODE_RAM.

Ce que je veux atteindre, c'est laisser une zone de remplissage supplémentaire (disons 64 octets) à la fin du bloc. La directive de définition de bloc a le paramètre size, si je veux que la taille MY_BLOCK atteigne 1024, je peux utiliser

define block MY_BLOCK with alignment = 32, size = 1024 { section myblock };

Et ça marche bien.

Cependant, je veux que la taille soit relative à la taille d'origine. Alors j'utilise

define block MY_BLOCK with alignment = 32, size = __section_size(section myblock) + 64 { section myblock };

Cette fois, l'éditeur de liens rapporte une erreur

Error[Lc009]: "__section_size" undefined

On dirait que __section_size ne peut être utilisé qu'en C au lieu du fichier de configuration de l'éditeur de liens.

En comparaison, ARMGCC, nous pouvons simplement utiliser

. = . + 64

Dans le fichier de l'éditeur de liens pour atteindre cet objectif. Je me demande si c'est réalisable en IAR.

Est-ce que quelqu'un peut m'aider?

0
Eric Sun 12 nov. 2020 à 17:23

1 réponse

Meilleure réponse

Le moyen d'y parvenir est de créer un bloc vide avec le remplissage et de l'ajouter à MY_BLOCK. Pour garantir que le contenu et le remplissage sont placés dans l'ordre indiqué dans le fichier, nous ajoutons l'attribut fixed order à MY_BLOCK. Nous devons également ajouter keep { block MY_PADDING }; au fichier de configuration pour indiquer à l'éditeur de liens d'inclure MY_PADDING même si son contenu n'est pas référencé depuis l'application. Le résultat ressemble à ceci :

define block MY_PADDING with size = 64 {};
define block MY_BLOCK with alignment = 32, fixed order { section myblock,
                                                         block MY_PADDING };
keep { block MY_PADDING };
place in CODE_RAM { block MY_BLOCK };
0
Johan 13 nov. 2020 à 07:37