4 votes

Comportement des compilateurs C de l'AVR. Gestion de la mémoire

Les compilateurs AVR C font-ils en sorte que le programme mémorise l'adresse dans la SRAM où la fonction a commencé à stocker ses données (variables, tableaux) dans la pile de données dans un des registres d'index afin d'obtenir l'adresse absolue de la variable locale par la formule :

absoluteAdr = functionDataStartAdr + localShiftOfVariable.

Et augmentent-ils le point d'empilement des données lorsque la variable est déclarée par sa longueur ou le point d'empilement augmente-t-il en fin/début de fonction pour toutes les longueurs de variables ?

0voto

Mo SAEED Points 26

Les compilateurs ne gèrent pas la RAM, les compilateurs au moment de la compilation calculent la taille requise pour chaque section de données comme bss, data, text, rodata, etc et génèrent un fichier objet relocalisable pour chaque unité de traduction.

Le linker vient après et génère un fichier objet et assigne les adresses relocalisables aux adresses absolues mappées selon le fichier de configuration du linker LCF.

En temps d'exécution, le mécanisme dépend de l'architecture elle-même. normalement, chaque appel de fonction a un cadre dans la pile où sont définis ses arguments, l'adresse de retour et les variables locales. la pile s'étend avec une création de variables et pour les microcontrôleurs AVR à faible coût, il n'y a pas de protection de gestion de la mémoire concernant l'augmentation de la pile ou le chevauchement entre la pile et une autre section de la mémoire -normalement le tas-. même s'il y a un OS qui gère la protection des tâches pour dépasser sa pile allouée, sans une unité de gestion de la mémoire, tout ce que l'OS peut faire est d'affirmer un RESET avec une raison d'accès illégal à la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X