Introduction
Architecture des ordinateur 2
Cours 5 - La Pile (Stack) AVR
Halim Djerroud <hdd@[Link]>
LIASD - Université Paris 8
Janvier 2018
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 1/8
Introduction La Pile
La pile (Stack)
Une pile est un bloc de mémoire de données consécutif
attribué par le programmeur. Ce bloc de mémoire peut être
utilisé à la fois par le contrôle interne du microcontrôleur ainsi
que par le programmeur pour stocker les données
temporairement.
La pile fonctionne avec un mécanisme LIFO (Last In First
Out), c’est-à-dire que le dernier élément enregistré dans la pile
est la premier à récupérer.
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 2/8
Introduction La Pile
Pointeur de pile (Stack Pointer)
Le pointeur de pile est fondamentalement un registre ou des
registres qui contiennent soit «l’adresse mémoire du dernier
emplacement sur cette pile où les données ont été stockées»
soit «l’adresse mémoire du prochain emplacement disponible
sur la pile pour stocker les données». La définition du pointeur
de pile dépend de la conception du microcontrôleur.
Dans les microcontrôleurs AVR, tels que ATMega328..., le
pointeur de pile conserve l’adresse sur le prochain
emplacement disponible sur la pile pour stocker les données.
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 3/8
Introduction La Pile
Le pointeur de pile AVR ( AVR Stack Pointer)
Le pointeur de pile de microcontrôleur AVR ATMega328 est
constitué de de deux (2) registres d’E/S SPL(Stack Pointer
Low) et SPH(Stack Pointer High)
Figure – SPH / SPL
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 4/8
Introduction La Pile
Pourquoi et quand utiliser le pointeur de pile
Stocker les variables locales
stocker des adresses de retour après des interruptions et des
appels de sous-routine
AVR ATMega328 possède un pointeur de pile 16 bits.
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 5/8
Introduction La Pile
Configuration de la pile AVR
Fichier : [Link]
; Initialisation du pointeur de pile
.equ RAMEND, 0x8ff
.equ SPL, 0x3d
.equ SPH, 0x3e
init:
ldi r16,lo8(RAMEND)
out SPL,r16
ldi r16,hi8(RAMEND)
out SPH,r16
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 6/8
Introduction La Pile
Opération sue la pile AVR
Le programmeur accède à la pile en utilisant les instructions
PUSH et POP
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 7/8
Introduction La Pile
Exemple
avr-gcc -O0 -S -o ex1.s ex1.c
char a = 3;
void f1(){
char c = 7;
}
void main(){
int b=5;
f1();
}
LIASD Université Paris 8 Halim DJERROUD Janvier 2018 8/8