Vous êtes sur la page 1sur 30

Microcontroleurs I

Introduction aux microcontrôleurs et Calcul


binaire

Pierre Corbineau

IESE3 S5

2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

À Propos de ce cours
Qui ?
I Pierre Corbineau (cours, TD)
pierre.corbineau@univ-grenoble-alpes.fr b
I Sylvain Toru & Frédéric Rousseau (TD, TP)
sylvain.toru@univ-grenoble-alpes.fr b
frederic.rousseau@univ-grenoble-alpes.fr b
I Liliana Andrade (TP)
liliana.andrade@univ-grenoble-alpes.fr b
I Pascal Reynaud (Ingénieur ST Microelectronics, TP)
Quoi ?
I Introduction à la programmation des microcontrôleurs
I Support : carte STM32F446-Nucleo (ARM Cortex-M4)
Où ? Quand ? Évaluation ?
Z Consultez ADE. exam écrit + exam TP b
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Qu’est-ce qu’un microcontrôleur (MCU) ?


Un circuit programmable complet pour les applications
embarquées.
Programmable Contient un micro-processeur (CPU)
Autonome horloges, mémoires volatiles et non-volatiles
intégrées
Communiquant périphériques de communications
Polyvalent périphériques d’acquisition/génération de signaux
numériques et analogiques
I Faible coût et petite taille
I Basse consommation d’énergie et refroidissement passif
I Puissance de calcul limitée (≈ PC des années 1990)
I Stockage limité :
Données Peu de place pour stocker des données
Code Faible complexité du programme embarqué
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Exemple : le STM32F446

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Information binaire et circuits numériques


Dans un circuit intégré numérique, l’information est codée dans
chaque fil en utilisant deux potentiels de référence :
I La masse (GND = GrouND)
I L’alimentation positive (VDD = Voltage Drain Drain) ↑VDD
Une ligne du circuit :
I est à l’état bas et porte le bit 0 si son potentiel est ≈GND
I est à l’état haut et porte le bit 1 si son potentiel est ≈VDD
I transmet un front montant (rising edge) si elle transite de
l’état bas vers l’état haut.
I transmet un front descendant (falling edge) si elle transite
de l’état haut vers l’état bas.
Dans un circuit synchrone, chaque ligne se stabilise à l’état
haut ou bas avant le top d’horloge suivant (fin/début du cycle).
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Groupes de bits couramment utilisés

Le bit (Binary digIT) est l’unité de base de codage de


l’information. Il est très souvent manipulé par groupes de taille
2n :
I 4 bits forment un demi-octet (half-byte) ou nibble
I Un demi-octet peut prendre 24 = 16 valeurs différentes
I 8 bits forment un octet (byte)
I Un octet peut prendre 28 = 256 valeurs différentes
I 16 bits forment un demi-mot (half-word)
I Un demi-mot peut prendre 216 = 65536 valeurs différentes
I 32 bits forment un mot (word)
I Un mot peut prendre 232 = 4294967296 valeurs différentes
Attention : sur les circuits 16-bits historiques et les processeurs
de type x86, le terme mot (word) désigne un groupe de 16 bits.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Terminologie, poids fort/poids faible


Dans un groupe de n bits (octet, mot, etc. . .), on numérote les
bits de droite à gauche en commençant à 0 :

(bn−1 bn−2 . . . b2 b1 b0 )2

I octet (b7 b6 b5 b4 b3 b2 b1 b0 )2
I demi-mot (b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 )2
I mot
(b31 b30 b29 b28 b27 b26 b25 b24 b23 b22 b21 b20 b19 b18 b17 b16 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 )2

I Le bit le plus à gauche bn−1 est appelé bit de poids fort


I En anglais MSB = Most Significant Bit
I Le bit le plus à droite b0 est appelé bit de poids faible
I En anglais LSB = Least Significant Bit
Cette terminologie est liée au codage des nombres en binaire.
On parle aussi de d’octet de poids fort/faible dans un mot. . .
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Opérations bit à bit : principe

Opération bit à bit :


I opération qui s’applique séparément sur chaque bit d’un
groupe de bits ou sur chaque paire de bits de même rang
de deux groupes de bits.
Exemples :
I négation (NOT) bit à bit (complément à 1)
I ET logique (AND) bit à bit
I OU logique (OR) bit à bit
I OU EXCLUSIF logique (XOR/EOR) bit à bit

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Opérations bit à bit : Complément à 1

Le complément à 1 consiste à inverser tous les bits d’un groupe


de bits (remplacer 1 par 0 et inversement).
La négation du bit x se note x̄ :
I 0̄ = 1 et 1̄ = 0
Exemple :

(01101011)2 = ( . . . . . . . . . . . . . . . . . . . . )2
Utilisations :
I En combinaison avec le ET bit à bit (masques).
I Calcul du complément à 2.
I En assembleur : mvn (MoVe Not)
I En C : ∼ (tilda = AltGr+2)

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Opérations bit à bit : OU logique

Le OU logique combine deux bits et vaut 1 si l’un au moins des


bits vaut 1.
I 0 OU 0 = 0, 0 OU 1 = 1, 1 OU 0 = 1, 1 OU 1 = 1,
Exemple :

(01101011)2 OU(00110110)2 = ( . . . . . . . . . . . . . . . . . . )2
Utilisations :
I Masque pour mettre des bits à 1.

(b7 b6 b5 b4 b3 b2 b1 b0 )2 OU(00110110)2 = ( . . . . . . . . . . . . . . . . . . )2

I En assembleur : orr, orn (OR Not)


I En C : | ("pipe" = AltGr+6)

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Opérations bit à bit : ET logique


Le ET logique combine deux bits et vaut 1 si les deux bits
valent 1.
I 0 ET 0 = 0, 0 ET 1 = 0, 1 ET 0 = 0, 1 ET 1 = 1,
Exemple :

(01101011)2 ET(00110110)2 = ( . . . . . . . . . . . . . . . . . . )2
Utilisations :
I Masque pour isoler un bit ou plusieurs bits.

(b7 b6 b5 b4 b3 b2 b1 b0 )2 ET(00110000)2 = ( . . . . . . . . . . . . . . . . . . )2
I Masque pour mettre des bits à 0.

(b7 b6 b5 b4 b3 b2 b1 b0 )2 ET(00110110)2 = ( . . . . . . . . . . . . . . . . . . )2
I En assembleur : and, bic (BIt Clear = ET NON).
I En C : & ("esperluette","ampersand")
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Opérations bit à bit : OU EXCLUSIF logique


Le OU EXCLUSIF logique combine deux bits et vaut 1 si
exactement un des deux bits vaut 1.
I 0 OUex 0 = 0, 0 OUex 1 = 1, 1 OUex 0 = 1, 1 OUex 1 = 0,
Exemple :

(01101011)2 OUex (00110110)2 = ( . . . . . . . . . . . . . . . . . . )2

Utilisations :
I Masque pour inverser des bits.

(b7 b6 b5 b4 b3 b2 b1 b0 )2 OUex (00110110)2 = ( . . . . . . . . . . . . . . . . . . )2

I En assembleur : eor (Exclusive OR)


I En C : ^ (= AltGr+9 ou circonflexe + espace).

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Numération de position

Principe de l’écriture en base B avec (B > 0) :


I B symboles distincts pour exprimer les quantités 0 à B − 1.
I Chaque symbole à un poids B fois plus grand que le même
symbole positionné immédiatement à sa droite.
I Valeur : (cn−1 . . . c1 c0 )B = n−1 i
P
i=0 ci × B
Exemple de valeur numérique d’un mot binaire (B=2) :

bit b7 b6 b5 b4 b3 b2 b1 b0
poids 27 26 25 24 23 22 21 20
exemple 0 1 1 0 1 0 1 1
bi × 2i
valeur ( . . . . . . )10

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Conversion binaire → décimal

Première technique (vue au transparent précédent)


I Appliquer la formule (bn−1 . . . b1 b0 )2 = n−1 i
P
i=0 bi × 2
Deuxième technique (formule de Horner)
I On lit les bits de gauche à droite
I poids fort vers poids faible
I On utilise un accumulateur N initialisé à 0.
I quand on lit un bit 0 : N ← 2 × N.
I quand on lit un bit 1 : N ← 2 × N + 1.
bit b7 b6 b5 b4 b3 b2 b1 b0
exemple 0 1 1 0 1 0 1 1
N (0)

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Conversion décimal → binaire

Méthode : Horner à l’envers


I On écrit de droite à gauche les divisions successives du
nombre à convertir par 2, jusqu’à obtenir 0.
I Les restes des divisions donnent les bits de l’écriture
binaire, du poids faible au poids fort.

bit b7 b6 b5 b4 b3 b2 b1 b0
exemple 54
reste

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Notation hexadécimale
Hexadécimal :
I Notation en base 16 avec 16 symboles distincts :
I les chiffres arabes 0 à 9
I les lettres latines a à f ou A à F (pour les valeurs 10 à 15)
I Un chiffre en base 16 peut remplacer 4 bits
I Hexadécimal = représentation compacte du binaire
I 32 bits = 8 chiffres hexa (ex : 0xdeadbeef)
Table de correspondance :
0 1 2 3 4 5 6 7
0000 0001 0010 0011 0100 0101 0110 0111
8 9 a/A b/B c/C d/D e/E f/F
1000 1001 1010 1011 1100 1101 1110 1111

Exemple : (01101011)2 = (6b)16 = 0x6b (Notation


C/assembleur).
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Addition des nombres binaires non-signés


Principe :
I On additionne deux nombres binaires de même taille.
I bit retenue=1 si on additionne au moins deux bits à 1
(retenue entrante comprise)
I bit résultat=1 si on additionne 1 ou 3 bits à 1 (retenue
entrante comprise)
I La retenue sortante au poids fort est stockée séparément
du résultat, dans l’indicateur C (Carry).
Exemple :
bit (C) b7 b6 b5 b4 b3 b2 b1 b0
retenue 0

1 0 1 0 1 0 1 1
+ 1 0 1 1 0 0 1 1
résultat
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Limites de la représentation des nombres


Les nombres entiers re-
présentés en machine (11111111)2 (00000000)2
(ici sur 8 bits) ne sont
pas des nombres en- (255)10 (0)10
tiers mathématiques (en-
semble N) : ils se com-
portent de manière cy-
clique comme l’ensemble − Z/256Z +
Z/256Z.

Débordement :
I indicateur Carry (128)10 (127)10

Et si on veut représenter (10000000)2 (01111111)2


les nombres négatifs ?

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Représentation des nombres négatifs


Pour représenter les
nombres négatifs, on (11111111)2 (00000000)2
choisit de donner au bit
de poids fort un poids (−1)10 (0)10
négatif (-128) : il devient
le bit de signe. On parle
alors de nombres signés.
− Z/256Z +
I (0xxxxxxx)2 :
nombre positif
I (1xxxxxxx)2 :
nombre négatif (−128)10 (127)10

Débordement : (10000000)2 (01111111)2


I indicateur oVerflow
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Complément à 2

Principe du complément à 2 :
I passer de la représentation binaire de N à celle de −N
I remarque sur le complément à 1 :

(xxxxxxxx)2 + (xxxxxxxx)2 = (11111111)2 = −1

I d’où (en ignorant la retenue car nombres signés) :

(xxxxxxxx)2 + ((xxxxxxxx)2 + 1) = (00000000)2 = 0

I donc si N = (xxxxxxxx)2 , alors −N = (xxxxxxxx)2 + 1


On appelle (xxxxxxxx)2 + 1 le complément à 2 de (xxxxxxxx)2 .

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Addition des nombres signés

L’addition des nombres signés en complément à 2 :


I Même résultat en binaire que l’addition des nombres
non-signés de même représentation binaire.
I L’indicateur C (Carry) n’indique plus un débordement.
I On utilise un autre indicateur : oVerflow (indicateur V)
Le débordement signé correspond à deux cas possibles :
I L’ajout de deux nombres positifs donne un résultat négatif.
I L’ajout de deux nombres négatifs donne un résultat positif.
Dans ces cas-là, l’indicateur V vaut 1, sinon il vaut 0.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Soustraction

En arithmétique signée ou non-signée, on soustrait un nombre


en additionnant son complément à 2 :

A − B = A + (−B) = A + (B + 1)
I L’indicateur C vaut 0 en cas de débordement non-signé ( si
A < B ).
I L’indicateur V (de l’addition) indique toujours un
débordement signé.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Multiplication

En général, il faut 2n bits pour stocker le résultat de la


multiplication de deux mots de n bits.
I Si on tronque le resultat à n bits, ce résultat ne dépend pas
du codage (signé/non-signé).
I instruction assembleur mul
I Si on garde les 2n bits, alors il faut traiter différemment le
cas de la multiplication signée et de la multiplication
non-signée.
I 2 instructions assembleurs distinctes umull et smull.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Multiplication : exemple non-signé

bit b15b14b13b12b11b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
1 1 1 0 1 0 1 1
× 1 0 1 1 0 0 1 1
1
1
0
0
1
1
0
1
résultat

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Décalage à gauche

I LSL = Logical Shift Left


I paramètre = nombre de positions à décaler
I bits de poids faible remplis avec des 0
I indicateur C = dernier bit qui sort
Exemple : décalage à gauche de 3 Positions.

Interprétation arithmétique : multiplication par 2n .


Utilisation : création de masques.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Décalage logique à droite

I LSR = Logical Shift Right


I paramètre = nombre de positions à décaler
I bits de poids fort remplis avec des 0
I indicateur C = dernier bit qui sort
Exemple : décalage logique à droite de 3 Positions.

Interprétation arithmétique : division par 2n (non-signé).


Utilisation : avec un masque ET pour récupérer des bits.

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Décalage arithmétique à droite

I ASR = Arithmetic Shift Right


I paramètre = nombre de positions à décaler
I bits de poids fort remplis avec des copies du bit de signe
I indicateur C = dernier bit qui sort
Exemple : décalage arithmétique à droite de 3 Positions.

Interprétation arithmétique : division par 2n (signé).

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Rotations
I ROR = ROtation Right, RRX = Rotation Right eXtended
I paramètre = nombre de positions à décaler (ROR
seulement)
I indicateur C = dernier bit qui sort (et rerentre)
Exemple : rotation à droite de trois positions

Rotation RRX étendue à l’indicateur C :


I toujours une seule position vers la droite

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023


Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Calcul à virgule fixe


Principe :
I Manipuler une valeur entière proportionnelle à la valeur à
virgule souhaitée
I Correspond à une fraction dont le dénominateur est
implicite
I Additions faciles si même dénominateur implicite
I Toujours faire les multiplications avant les divisions en
faisant attention aux débordements.
Intérêt :
I Utilise uniquement des nombres entiers (calculs efficaces)
I Pas besoin de FPU (Floating-Point Unit) → moins cher.
Inconvénients :
I Nécessite une analyse préalable des ordres de grandeur.
I Contrainte forte sur la dynamique des valeurs
représentables.
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule

Les nombres à virgule flottante

Exemple : les nombres simple précision IEEE754 du STM32F4.


I format binaire
(seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm)2
I S (1 bit) : signe
I E (8 bits) : exposant entre 1 et 254
I cas particuliers pour E = 0 et E = 255
I M (23 bits) : mantisse entre 1 (inclus) et 2 (exclus)
I Représente le nombre rationel (−1)S × M × 2(E−127)
I Précision relative : 2−23 ≈ 10−7
Attention aux erreurs d’arrondi et aux tests d’égalité !

Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2022–2023

Vous aimerez peut-être aussi