Académique Documents
Professionnel Documents
Culture Documents
Durée : 2 heures
-----------------------------------------------------------------------------------------------------------------------
QCM : une seule réponse possible ; répondez sur la grille QCM, en renseignant vos identifiants.
Une bonne réponse : 1 point ; une mauvaise réponse : 0 point ; pas de réponse : 0 point.
Erreur dans la saisie des noms/prénoms ou identifiants : -1 point.
-----------------------------------------------------------------------------------------------------------------------
1- L’indentation du code en C :
A- Elle joue un rôle dans la compilation mais peut ne pas être respectée
B- Elle ne joue aucun rôle à la compilation mais doit être respectée pour rendre le code lisible
C- Elle ne joue aucun rôle dans la compilation et il n’est pas utile de la respecter
D- Comme en python, elle joue un rôle dans la compilation et doit être respectée scrupuleusement
2- Quel prototype de fonction est correct ci-dessous pour une fonction permettant de connaître la
taille d’une chaine de caractère ?
void my_strlen(String s, uint16_t & size); //A
3- Le débogueur :
A- Compile le programme et nous indique les erreurs de syntaxe
B- Corrige les erreurs du programme
C- Donne accès à la mémoire et permet l’exécution en pas à pas du programme
D- Stoppe l’exécution du programme dans la mémoire du microcontrôleur en cas de problème
Cursus Ingénieur 1ère année – Promotion Noether
Contrôles du 1er semestre 2020/2021 (S5)
Epreuve du 23 novembre 2020 – Samuel Poiraud
static int a = 6;
void function(void)
{
int b = 1;
static int c = 5;
//...
}
4- Dans cet exemple, la variable a :
A- Existe en permanence et est accessible depuis n’importe quel fichier
B- Existe en permanence et est accessible depuis le fichier courant
C- Existe lorsque l’on exécute une des fonctions du fichier courant, détruite le reste du temps
D- Est créé et initialisée à 6 à chaque exécution d’une des fonctions du fichier courant
float a, b, c;
a = 0.2;
b = 0.5;
c = a+b;
if(c == 0.7)
printf("ok");
else
printf("ko");
8- A votre avis, dans la fonction ci-dessus, qu’est ce qui sera affiché par printf() ?
A- La chaine « ko », car il est évident que 0.2+0.5 ne vaut pas 0.7
B- La chaine « ok », car il est évident que 0.2+0.5 vaut 0.7
C- Je ne sais pas, et mieux vaut ne pas écrire les choses ainsi
D- La chaine « ok » suivie de la chaine « ko »
Cursus Ingénieur 1ère année – Promotion Noether
Contrôles du 1er semestre 2020/2021 (S5)
Epreuve du 23 novembre 2020 – Samuel Poiraud
int tab[125];
9- Pour accéder aux cases de ce tableau tab dont on connait l’adresse, on utilise :
A- Le symbole ‘.’
B- Le symbole ‘->’
C- Les parenthèses ( )
D- Les accolades [ ]
country_t europe[27];
11- Pour accéder aux champs de cette structure europe que nous avons défini, on utilise :
A- Le symbole ‘->’
B- Le symbole ‘.’
C- Les accolades [ ]
D- Les parenthèses ( )
12- Peut-on appeler une fonction dont on n’a pas défini le prototype ?
A- Oui mais seulement si son prototype admet aucun paramètre et retourne un char.
B- Oui, cela fonctionne très bien dans tous les cas, mais ce n’est pas propre.
C- Non, cela fonctionne pourtant dans certains cas, mais on se l’interdit dans tous les cas.
D- Non, et de toute façon ça ne compile pas.
14- Quel est l’ordre dans lequel ces outils sont utilisés ?
A- Programmation de la cible compilation édition des liens
B- Programmation de la cible édition des liens compilation
C- Édition des liens compilation programmation de la cible
D- Compilation édition des liens programmation de la cible
16- A quoi servent les lignes que l’on place dans un header :
#ifndef APPLI_ADC
#define APPLI_ADC
// ...
#endif /* APPLI_ADC */
A- Elles permettent de configurer le code avec ou sans le module APPLI_ADC.
B- Elles permettent au compilateur de savoir qu’il traite un fichier header.
C- Elles encadrent le contenu privé du header.
D- Elles permettent d’éviter les risques liés aux inclusions récursives.
18- Quelle définition est la meilleure pour expliquer la signification de la ligne, placée dans une
fonction :
static int skippers = 33;
A- Déclaration dans la fonction d’une variable locale temporaire, initialisée à 33.
B- Définition dans la fonction d’une constante locale skippers de valeur 33.
C- Déclaration d’une structure statique contenant un entier de nom skippers et la valeur 33.
D- Définition d’une variable locale skippers, permanente et de valeur initiale 33.
22- Dans la fonction blink_led() ci-dessous, quel est le rôle de la variable ‘b’ ?
A- Elle provoque le changement d’état de la sortie A5 à chaque appel de blink_led()
B- Elle permet d’initialiser le registre lors de chaque appel de la fonction blink_led()
C- C’est une variable qui s’initialise à 0 à chaque entrée dans la fonction blink_led()
D- Elle ne sert à rien dans ce contexte
void blink_led(void)
{
static bool_e b = FALSE;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, b);
b = !b;
}
28- Quel schéma était-il demandé de réaliser dans le cadre de la mission fan ?
29- Dans lequel des schémas précédents, le ventilateur est-il susceptible de tourner en permanence quel
que soit le signal de commande ?
A- Le schéma A
B- Le schéma B
C- Le schéma C
D- Le schéma D
30- Dans la mission « grand plongeon », a quoi sert le registre BSRR du périphérique GPIOA ?
A- Il sert à configurer la broche souhaitée en sortie. (Bus Status Redirect Register)
B- Il sert à agir indirectement sur le registre ODR du GPIOA. (Bit Set Reset Register)
C- Il contient l’état du port A en sortie. (Bits State Reduced Register)
D- Il mémorise l’état des bits du GPIOA (Bits Save Reduced Register)
GPIOA->ODR |= 1<<4;
32- Lorsqu’un flag d’interruption est levé, (et que l’interruption correspondante est activée) :
A- Le processeur baisse le flag et va traiter l’interruption à la fin de la fonction courante
B- Le processeur interrompt la tâche en cours d’exécution et va exécuter la routine d’interruption
C- Le processeur bascule l’interrupteur du périphérique concerné
D- Le processeur va exécuter la tâche de fond dans laquelle il traite l’évènement
Cursus Ingénieur 1ère année – Promotion Noether
Contrôles du 1er semestre 2020/2021 (S5)
Epreuve du 23 novembre 2020 – Samuel Poiraud
33- Quel est l’intervalle de définition d’un entier non signé sur 16 bits ?
34- Jusqu’à combien (à 10% près, et en décimal) peut-on compter des nombres entiers avec 32 bits ?
i est ________________________________________.
Calculez les valeurs suivantes (les nombres sont exprimés sur 8 bits, les réponses peuvent être
indiquées en décimal, en binaire, ou en hexadécimal)
38- 0x23 | 0x5F
39- 0x0F & 0x55
40- 7 << 2
41- 19 >> 1
42- 0xF0 || 0x00
43- 4%3
44- ~(1<<4)
void function(void)
{
48- Ce fichier ne compile pas, car il faut inclure le header types.h. Incluez ce header ci-dessous :
//<-- Inclusion du header types.h
49- Complétez également le contenu de cette fonction to_lower qui doit renvoyer :
- La valeur c+'a'-'A' si le paramètre c est compris entre 'A' et 'Z' inclus
- La valeur de c sinon.
Vous devez impérativement utiliser l’opérateur ternaire.
51- Déclarez ci-dessous un tableau de 12 entiers sur 8 bits, en utilisant la macro TAB_SIZE.
52- A l’aide d’une boucle, initialisez chaque case du tableau avec la valeur 'p'.
Affectez ensuite la valeur ‘r’ à la deuxième case de ce tableau.
#define TAB_SIZE 12
53- Définissez un type énuméré doigt_e dont les valeurs sont les noms des 5 doigts de la
main (exemple : DOIGT_MAJEUR est un doigt) :
Créez ensuite une variable doigt1, initialisée à DOIGT_POUCE.
55- Définissez ensuite ci-dessous une variable d1 de type doigt_t. Initialisez les champs de la
structure. (Le doigt d1 mesure 17mm de diamètre, est de type DOIGT_ANNULAIRE, et se
nomme « annulaire_median »). Son périmètre peut se calculer avec la formule magique : p=π.d
56- Complétez ci-dessous le switch avec les doigts définis précédemment : Pour chaque doigt, cette
fonction doit retourner l’adresse d’une chaine de caractère contenant le nom du doigt.
Par exemple : ret = "majeur"; Dans le cas default, retournez la chaine "doigt inconnu".
Pour gagner du temps, votre réponse pourra se contenter de gérer seulement 2 doigts si la solution
présentée est facilement extensible aux autres doigts.
switch( )
{
return ret;
}
void RTC_init(void)
{
rtc_handle.Instance = RTC;
rtc_handle.Init.AsynchPrediv = 256*128;
rtc_handle.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
HAL_RTC_Init( );
}
Cursus Ingénieur 1ère année – Promotion Noether
Contrôles du 1er semestre 2020/2021 (S5)
Epreuve du 23 novembre 2020 – Samuel Poiraud
59- Que met-on dans un header ou dans un fichier source ? (cocher les réponses valides)
Heade Source Nulle
r (.c) part
(.h)
Inclusion d’un header nécessaire à l’interprétation des types et
fonctions publiques
Inclusion d’un header nécessaire à l’interprétation des types et
fonctions privées
Inclusion d’un fichier source .c
Prototypes des fonctions publiques
Prototypes des fonctions privées
Variables privées permanentes
Types privés
Corps des fonctions
uint8_t get_nb_cars(void)
{
62- Remplissez le contenu de cette fonction afin qu’elle renvoie la valeur en degré d’un angle exprimé
en RAD.4096 (Unité d’angle où 1 représente un 4096ème de radian).
o On dispose d’une macro PI4096 valant 12868 (pi*4096).
o Mathématiquement, cette fonction revient à calculer : rad*180/PI4096.
/**
* @brief fonction qui converti en degrés un angle fourni en radian4096
* @return cette fonction retourne la valeur convertie en degrés
* @param rad : l'angle que l'on veut convertir
* @pre rad doit être compris entre –PI4096 et +PI4096
* @post la valeur de retour sera comprise entre -180 et +180
*/
int16_t rad2deg(int16_t rad)
{
63- Remplissez le contenu de cette fonction qui transforme 2 entiers sur 8 bits en 1 entier sur 16 bits :
/**
* @brief fonction qui rassemble 2 entiers sur 8 bits en 1 entier sur 16 bits
* @return le nombre constitué de la suite des bits des 2 paramètres.
* @param octet de poids fort : high. Octet de poids faible : low.
*/
uint16_t u16fromu8(uint8_t high, uint8_t low)
{
64- Indiquez si les affirmations sont vraies (V) ou fausses (F), à partir de la machine à états finis.