Vous êtes sur la page 1sur 8

Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

Les interruptions

Notation

Votre note est :


4 sur 10

Vos réponses

Question 1
Le programme suivant :

#include <stm32f10x_lib.h>
#include <math.h>

void S2appuye(void)
{
if (S2presse) {
if (!((GPIOA->IDR & 0x0001) == 0 )) {
S2presse = 0;
Tempo(500000);
}
}
else {
if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye
S2presse = 1;
Tempo(500000);
}
}
}

int main(void)
{
int sum;
int vector[10000], coef[10000], prod[10000];

{
while(1)
{
if (S2appuye())
{
sum = 0;
for (i = 0; i < 10000; i++)
sum += abs(vector[i]);
}
for(i=0,i<10000;i++)
prod[i] = sum*coef[i];
}
}

permet au système :

Votre réponse était


une scrutation périodique de l'état de S2 ?

Question 2

1 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

Une interruption c'est :

Votre réponse était


La réaction à un événement synchrone dont l'apparition est identifiée dans la
séquence des instructions du programme en cours d'exécution.

Question 3
Lors de l'exécution d'une routine de service d'interruption, il faut au préalable

Votre réponse était


que le processeur sauvegarde le compteur de programme, le registre d'état et
les registres de passage des paramètres

Question 4
Qu'est que la table des vecteurs d'interruption dans le STM32

Votre réponse était


Une table qui indique l'état des interruptions

Question 5
L'instruction :
NVIC->ISER[0] = (1<<28);
réalise

Votre réponse était


Une autorisation des interruptions provenant du Timer2

Question 6
si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie

Votre réponse était


Une interruption ayant une priorité de 128

Question 7
Quels sont les niveaux d'autorisation des interruptions du STM32 ?

Votre réponse était


Un niveau local et un niveau périphériques

Question 8
Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train
d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il
n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra
son cours sera exécuté

Votre réponse était


en mode utilisateur

2 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

Question 9
La pile lors de l'exécution d'une routine de service d'interruption sert à

Votre réponse était


Sauvegarder la valeur du compteur de programme, la valeur du registre d'état
et la valeur des registres de passage des paramètres avant de dérouter le
compteur de programme vers la routine d'interruption.

Question 10
Il existe deux types d'interruptions

Votre réponse était


les exceptions systèmes induisant une remise à zéro du système et les
interruptions externes provoquées par des périphériques.

Correction

Question 1
Le programme suivant :

#include <stm32f10x_lib.h>
#include <math.h>

void S2appuye(void)
{
if (S2presse) {
if (!((GPIOA->IDR & 0x0001) == 0 )) {
S2presse = 0;
Tempo(500000);
}
}
else {
if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye
S2presse = 1;
Tempo(500000);
}
}
}

int main(void)
{
int sum;
int vector[10000], coef[10000], prod[10000];

{
while(1)
{
if (S2appuye())
{
sum = 0;
for (i = 0; i < 10000; i++)
sum += abs(vector[i]);
}
for(i=0,i<10000;i++)

3 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

prod[i] = sum*coef[i];
}
}

permet au système :

Bonne réponse
La bonne réponse était
une scrutation périodique de l'état de S2 ?

Question 2
Une interruption c'est :

Mauvaise réponse
La bonne réponse était
une rupture de l'exécution séquentielle d'un programme sans connaissance à
priori de l'apparition de l'événement qui cause cette rupture.

Question 3
Lors de l'exécution d'une routine de service d'interruption, il faut au préalable

Bonne réponse
La bonne réponse était
que le processeur sauvegarde le compteur de programme, le registre d'état et
les registres de passage des paramètres

Question 4
Qu'est que la table des vecteurs d'interruption dans le STM32

Mauvaise réponse
La bonne réponse était
Une table qui indique les adresses des routines de service des interruptions.

Question 5
L'instruction :
NVIC->ISER[0] = (1<<28);
réalise

Bonne réponse
La bonne réponse était
Une autorisation des interruptions provenant du Timer2

Question 6
si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie

Mauvaise réponse
La bonne réponse était
Une interruption ayant une priorité de 8

4 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

Question 7
Quels sont les niveaux d'autorisation des interruptions du STM32 ?

Mauvaise réponse
La bonne réponse était
Un niveau global, un niveau périphériques et un niveau local lié aux fonction
du périphérique

Question 8
Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train
d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il
n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra
son cours sera exécuté

Mauvaise réponse
La bonne réponse était
en mode superviseur

Question 9
La pile lors de l'exécution d'une routine de service d'interruption sert à

Bonne réponse
La bonne réponse était
Sauvegarder la valeur du compteur de programme, la valeur du registre d'état
et la valeur des registres de passage des paramètres avant de dérouter le
compteur de programme vers la routine d'interruption.

Question 10
Il existe deux types d'interruptions

Mauvaise réponse
La bonne réponse était
les exceptions systèmes provoquées par dysfonctionnement du système et les
interruptions externes provoquées par des périphériques. Chaque source
d'interruption possède son propre vecteur d'interruption

Explication

Question1
Le programme suivant :

#include <stm32f10x_lib.h>
#include <math.h>

void S2appuye(void)
{
if (S2presse) {
if (!((GPIOA->IDR & 0x0001) == 0 )) {
S2presse = 0;
Tempo(500000);

5 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

}
}
else {
if (((GPIOA->IDR & 0x0001) == 0 )) { // S2 est appuye
S2presse = 1;
Tempo(500000);
}
}
}

int main(void)
{
int sum;
int vector[10000], coef[10000], prod[10000];

{
while(1)
{
if (S2appuye())
{
sum = 0;
for (i = 0; i < 10000; i++)
sum += abs(vector[i]);
}
for(i=0,i<10000;i++)
prod[i] = sum*coef[i];
}
}

permet au système :

Explication :

Il s'agit ici d'attente active. Dans le code il est visible que cette méthode n'est
pas réactive : il faut attendre que les traitements sur les vecteurs prod et sum
soient effectués avant d'aller scruter à nouveau S2, cela prend au minimum
10000 cycles d'horloges (pour le calcul du vecteur prod). Elle n'optimise pas
l'utilisation puisque périodiquement la fonction de scrutation de S2 va être
appelée même si aucun appui n'est effectif. Ce traitement de scrutation a un
coût temporel : une temporisation de 5000 cycles. Durant ce temps aucun autre
traitement n'est effectué.

Question2
Une interruption c'est :

Explication :

Cette définition indique tout l'enjeu de la gestion d'une interruption. Les


événements qui provoquent une interruption sont dans le cas général
asynchrones, il faut donc pouvoir les identifier et dérouter l'exécution
séquentielle vers une procédure de traitement de ces événements.
L'identification ne peut se faire dans la séquence des instructions du
programme et doit être réalisée matériellement.

Question3
Lors de l'exécution d'une routine de service d'interruption, il faut au préalable

Explication :

6 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

Il faut qu'un mécanisme matériel déclenché automatiquement lors de la prise


en compte de l'interruption sauvegarde ces informations pour pouvoir ensuite
revenir à une exécution normale du programme. Le passage du mode
utilisateur au mode superviseur s'effectue de manière automatique, c'est
réalisé matériellement. Si FAULTMASK est à 1, toutes les interruption sauf NMI
et reset sont invalidées et non prises en compte.

Question4
Qu'est que la table des vecteurs d'interruption dans le STM32

Explication :

C'est grâce à cette table que la routine de service d'interruption peut-être traité.
Lors qu'une interruption intervient, après la sauvegarde du compteur de
programme, du registre d'état et des registres de passage des paramètre, cette
table est automatique lue. Pour déterminer la bonne adresse le numéro de
l'interruption est utilisée en tant qu'indice de cette table. Une fois récupérée de
manière automatique, cette adresse est copiée dans le compteur de
programme.

Question5
L'instruction :
NVIC->ISER[0] = (1<<28);
réalise

Explication :

Effectivement, le timer2 est la 28ième source d'interruption

Question6
si le registre BASEPRI contient la valeur 128 quelle interruption peut être servie

Explication :

Le registre BASEPRI interdit toute interruption de niveau indentique au plus


faible, donc de valeur de priorité plus haute ou égale à la valeur de ce registre

Question7
Quels sont les niveaux d'autorisation des interruptions du STM32 ?

Explication :

Il y a effectivement 3 niveaux d'autorisations dans le STM32. Il est possible


d'interdire ou d'autoriser toutes les interruptions via les registre PRIMASK et
FAULTMASK. Il est possible d'interdire ou d'autoriser les interruptions
provenant d'un périphériques via les registres NVIC-ISER. Et il est possible en
interne des périphériques d'interdire ou d'autoriser les interruptions en
fonctions d'événements spécifiques en paramétrant les registres de
configuration de ces périphériques.

Question8
Si la valeur du registre LR est égale à 0xFFFFFFF9 et que le STM32 est en train

7 of 8 1/7/2021, 12:15 AM
Form@Web Jacquenod Frederic http://bertrand.granado.free.fr/iWeb/microcontroleur/MicroControleur...

d'exécuter une routine de service d'interruption. Une fois cette routine exécutée, si il
n'y a pas de nouvelle demande d'interruption en attente, le programme qui reprendra
son cours sera exécuté

Explication :

C'est la définition de la valeur EXC_RETURN contenue dans le registre LR lors


de l'exécution d'une routine de service d'interruption. Il n'existe que deux mode
sur le STM32 : le mode utilisateur et le mode superviseur.

Question9
La pile lors de l'exécution d'une routine de service d'interruption sert à

Explication :

Indispensable si on veut pouvoir reprendre l'exécution normale du programme.


Cette pile peut aussi servir à sauvegarder les registres durant l'exécution du
programme mais pas de façon exclusive. Et c'est le tas qui est crée pour
l'allocation mémoire nécessaire aux variables dynamiques.

Question10
Il existe deux types d'interruptions

Explication :

Les exceptions systèmes sont liées à un dysfonctionnement tel que la division


par 0 ou l'accès à une zone mémoire non définies. Elle n'induisent pas une
remise à zéro systématique, mais un traitement spécifique en fonction de la
source de l'exception système. Les instructions spécifiques, telle que SC, sont
considérées comme des interruptions externes.

bertrand.granado@ensea.fr
2010-11-10
Questionnaire produit par
le logiciel Form@Web
©Jacquenod Frédéric
http://www.jacquenod.cicrp.jussieu.fr/Qcm

8 of 8 1/7/2021, 12:15 AM