0% ont trouvé ce document utile (0 vote)
7 vues8 pages

Pointeur de Pile AVR en Architecture

Ce document présente la pile (Stack) dans l'architecture des microcontrôleurs AVR, en expliquant son fonctionnement LIFO et l'utilisation du pointeur de pile pour stocker des données temporaires. Il décrit également la configuration du pointeur de pile dans l'AVR ATMega328 et les opérations de base comme PUSH et POP. Un exemple de code est fourni pour illustrer l'utilisation de la pile dans un programme.

Transféré par

firouisse
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues8 pages

Pointeur de Pile AVR en Architecture

Ce document présente la pile (Stack) dans l'architecture des microcontrôleurs AVR, en expliquant son fonctionnement LIFO et l'utilisation du pointeur de pile pour stocker des données temporaires. Il décrit également la configuration du pointeur de pile dans l'AVR ATMega328 et les opérations de base comme PUSH et POP. Un exemple de code est fourni pour illustrer l'utilisation de la pile dans un programme.

Transféré par

firouisse
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi