Micro_TP1
Rapport de Micro TP1
JIN Zhuoyuan 22213816
Exercice1
ex1.
Que contient le fichier startup_stm32f446retx.s ? Que permet-il selon vous ?
Contenu :
Le fichier startup_stm32f446retx.s est un fichier d’assemblage. Il contient principalement le code de démarrage pour le microcontrôleur STM32F446RETx. Il inclut la définition de la table des vecteurs d’interruption, l’initialisation de la pile, l’initialisation des segments de données (.data et .bss), l’appel à la fonction SystemInit pour configurer l’horloge du système, et l’appel à la fonction main de l’application.
Il définit également des gestionnaires d’exceptions par défaut (Default_Handler) qui entrent dans une boucle infinie en cas d’interruption inattendue.
Fonctionnement :
Ce fichier permet de préparer l’environnement pour l’exécution du code de l’application. Il initialise l’état initial du microcontrôleur, notamment en configurant le pointeur de pile, en copiant les données initialisées depuis la mémoire flash vers la mémoire SRAM, en mettant à zéro le segment .bss , et en démarrant le système en appelant la fonction main.
Ligne 126, une table des vecteurs est créée en mémoire. Que contient-elle ?
La table des vecteurs (g_pfnVectors) créée à la ligne 126 contient les adresse:adresse de la pile(l’adresse de la fin de la pile _estack) ; adresse du gestionnaire de réinitialisation(adresse de la routine Reset_Handler) ; adresse des gestionnaires d’exceptions et d’interruptions(NMI, le Hard Fault, les fautes de mémoire ect)
Trouver la section Reset_Handler (ligne 55). Que réalise-t-elle selon vous ?
La section Reset_Handler réalise les opérations suivantes :
1.Initialisation du pointeur de pile : Elle charge l’adresse de la fin de la pile (_estack) dans le registre r0, puis affecte cette valeur au pointeur de pile (SP).
2.Initialisation de l’horloge du système : Elle appelle la fonction SystemInit pour configurer l’horloge du microcontrôleur.
3.Copie des données initialisées : Elle copie les données initialisées du segment .data depuis la mémoire flash vers la mémoire SRAM.
4.Mise à zéro du segment .bss : Elle met à zéro le segment .bss.
5.Appel aux constructeurs statiques : Elle appelle la fonction __libc_init_array pour exécuter les constructeurs statiques des objets globaux.
6.Appel à la fonction main : Enfin, elle appelle la fonction main de l’application pour démarrer l’exécution du code utilisateur.
ex2
(1)Analyse du fichier
Analyser les différentes lignes de code, ainsi que tous les mots clés.
- .text : Il s’agit d’un indicateur de section en langage assembleur.
- .global main : Le mot - clé .global est utilisé pour déclarer un symbole global. Ici, il déclare main comme un symbole global
- .type main, %function :Le mot - clé .type est utilisé pour spécifier le type d’un symbole. %function indique que main est un symbole de type fonction.
- /* — A COMPLETER —*/ : C’est une commentaire
Stop : C’est également une étiquette qui marque une position dans le code. Du point de vue du microprocesseur, c’est une destination de saut. - .B stop :B est une instruction de saut en langage assembleur, utilisée pour effectuer un saut inconditionnel à l’étiquette spécifiée. Ici, B stop signifie qu’il faut sauter à l’adresse marquée par l’étiquette stop.
- .BX LR :BX est une instruction de branchement avec échange, utilisée pour sauter à une adresse spécifiée et changer l’ensemble d’instructions.
- .end : C’est un indicateur de fin du fichier assembleur
Que représente « main: » ainsi que « stop: »? Que représentent main et stop d’un point de vue du microprocesseur ?
- “main”:Du point de vue du microprocesseur, lorsque le programme est mis sous tension ou se rétablit d’un état d’exception, le pointeur d’instruction (PC) sera défini sur l’adresse mémoire correspondant à l’étiquette main, et le microprocesseur commencera à extraire et à exécuter les instructions à partir de cette adresse.
- “stop”:est une adresse de destination de saut. Lorsque l’instruction B stop est exécutée, le microprocesseur définira le pointeur d’instruction (PC) sur l’adresse mémoire correspondant à l’étiquette stop, puis commencera à exécuter les instructions à cette adresse. Étant donné que l’étiquette stop est suivie immédiatement par l’instruction B stop, le microprocesseur saute constamment entre cette adresse et l’étiquette stop, créant ainsi une boucle infinie.
(2) programme-V1
1 | .text |
(3)Débogage
Q : Combien de registres génériques dispose le processeur ? Que représente le registre PC ?
- 13(R0~R12)
- Le registre PC est le compteur de programme. Il contient l’adresse de l’instruction suivante à exécuter. Lorsque le processeur exécute une instruction, il incrémente le PC pour pointer vers l’instruction suivante dans la mémoire.
Q : Que contient-il ? Pourquoi sa valeur est 0x80000204 (ou une valeur proche) ? Dans quelle zone mémoire se situe ce code ?
- Contenu:Le registre PC contient l’adresse mémoire de l’instruction qui sera exécutée ensuite.
- Pourquoi:Dans les microcontrôleurs STM32, la mémoire flash démarre généralement à l’adresse 0x08000000. La valeur 0x80000204 (ou proche) indique que le programme est en train d’exécuter une instruction située dans la mémoire flash.
- Le code se situe dans la mémoire flash.
Q : Que contient le registre LR et à quoi sert-il ?
Le registre LR contient l’adresse de retour d’une sous - routine.
Il est utilisé pour permettre au programme de retourner à l’endroit où il était avant d’appeler la sous - routine.
Q : Que contient le registre SP et à quoi sert-il ?
SP contient l’adresse de la tête de la pile,et il est utilisé pour gérer la pile.
Q : Que contient le registre xPSR et à quoi sert-il ?
Le registre xPSR est un registre de statut étendu. Il regroupe plusieurs registres de statut tels que le APSR, le IPSR et le EPSR.
Il est utilisé pour stocker des informations sur l’état du processeur et le résultat des opérations.
Avant d’exécuter la première instruction,la valeur du registre PC
0x8000204
Après d’exécuter
0x800020e
Q : Que pouvez-vous conclure ?
J’ai découvert que la valeur du registre PC change selon l’ordre des instructions dans le code. Il stocke l’adresse de l’instruction suivante à exécuter.
R4

R4 = 9
Selon les valeurs initiales R0 = 1, R1 = 3 et R2 = 5, le résultat attendu de R4 est (1 + 3)+ 5 = 9. Et la valeur de R4 = 9, donc c’est correspond parfaitement à la logique du code.
(4) Ex1_V2
1 |
|
la valeur de SUM avant d’exécuter

la valeur de SUM après d’exécuter

(5) Ex1_V3 (tab)
1 | .data |
la valeur de RES avant d’exécuter

après add 1

+12

+28

+4

+3

fini le valeur de RES

(6) Ex1_V4 (Branchement conditionnel)
1 | .data |
Avant la condition de test

Cas1. SUM = 22


Car la somme des éléments dans le tableau tab est égale à 22, qui est inférieure à 30, il n’y a pas de saut à l’étiquette sup. Ainsi, la valeur de R6 reste à 0.
Cas2. SUM =

Étant donné que la somme des éléments dans le tableau tab est de 48, qui est supérieure à 30, le programme saute donc à l’étiquette sup, et la valeur de R6 est assignée à 1.
Exercice 2
(1)Boucle
1 | .data /*mot clé de déclaration d'une zone de données */ |
Le tableau tab avant l’affectation

Le tableau tab après la fin de l’affectation(boucle)

(2)
1 | .data |
Exercice 3
1 | .data /* mot clé de déclaration d'une zone de données */ |
Cas1. Les chaînes de caractères sont identiques.


Parce que les chaînes de caratères sont identiques, donc exécuter ‘fin’ R7 = 1.
Cas2. Les chaînes de caractères sont différentes


Parce que les chaînes de caratères sont différentes, donc exécuter ‘fin2’ R7 = 0.
Exercice 4
1 |
|
le valeur de Somme avant d’exécuter
Somme = 0
le valeur de Somme après d’exécuter
Somme = 48






