microcontroleurs i - introduction aux microcontrôleurs et calcul … · 2020-05-25 ·...
Post on 01-Aug-2020
4 Views
Preview:
TRANSCRIPT
Microcontroleurs I
Introduction aux microcontrôleurs et Calculbinaire
Pierre Corbineau
IESE3 S5
2019–2020
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, TP)
pierre.corbineau@univ-grenoble-alpes.fr bI Sylvain Toru (TD, TP)
sylvain.toru@univ-grenoble-alpes.fr bI Frederic Rousseau (TP)
frederic.rousseau@univ-grenoble-alpes.fr bI Pascal Reynaud (Ingénieur ST Microelectronics, TP)
Quoi?I Introduction à la programmation des microcontrôleursI Support : carte STM32F446-Nucleo (ARM Cortex-M4)
Où ? Quand ? Évaluation?Z Consultez ADE. exam écrit + exam TPb
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 applicationsembarquées.Programmable Contient un micro-processeur (CPU)
Autonome horloges, mémoires volatiles et non-volatilesintégrées
Communiquant périphériques de communicationsPolyvalent périphériques d’acquisition/génération de signaux
numériques et analogiques
I Faible coût et petite tailleI 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éesCode Faible complexité du programme embarqué
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 — 2019–2020
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 danschaque 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 ≈GNDI est à l’état haut et porte le bit 1 si son potentiel est ≈VDDI 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’étathaut ou bas avant le top d’horloge suivant (fin/début du cycle).
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 del’information. Il est très souvent manipulé par groupes de taille2n :I 4 bits forment un demi-octet (half-byte) ou nibble
I Un demi-octet peut prendre 24 = 16 valeurs différentesI 8 bits forment un octet (byte)
I Un octet peut prendre 28 = 256 valeurs différentesI 16 bits forment un demi-mot (half-word)
I Un demi-mot peut prendre 216 = 65536 valeurs différentesI 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 processeursde type x86, le terme mot (word) désigne un groupe de 16 bits.
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Terminologie, poids fort/poids faibleDans un groupe de n bits (octet, mot, etc. . .), on numérote lesbits de droite à gauche en commençant à 0 :
(bn−1bn−2 . . . b2b1b0)2
I octet (b7b6b5b4b3b2b1b0)2I demi-mot (b15b14b13b12b11b10b9b8b7b6b5b4b3b2b1b0)2I mot
(b31b30b29b28b27b26b25b24b23b22b21b20b19b18b17b16b15b14b13b12b11b10b9b8b7b6b5b4b3b2b1b0)2
I Le bit le plus à gauche bn−1 est appelé bit de poids fortI En anglais MSB = Most Significant Bit
I Le bit le plus à droite b0 est appelé bit de poids faibleI 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 — 2019–2020
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 rangde deux groupes de bits.
Exemples :
I négation (NOT) bit à bit (complément à 1)I ET logique (AND) bit à bitI OU logique (OR) bit à bitI OU EXCLUSIF logique (XOR/EOR) bit à bit
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 groupede 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 — 2019–2020
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 desbits 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.
(b7b6b5b4b3b2b1b0)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 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Opérations bit à bit : ET logiqueLe ET logique combine deux bits et vaut 1 si les deux bitsvalent 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.
(b7b6b5b4b3b2b1b0)2 ET(00110000)2 = ( . . . . . . . . . . . . . . . . . . )2
I Masque pour mettre des bits à 0.
(b7b6b5b4b3b2b1b0)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 — 2019–2020
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 siexactement 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.
(b7b6b5b4b3b2b1b0)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 — 2019–2020
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 . . . c1c0)B =
∑n−1i=0 ci × Bi
Exemple de valeur numérique d’un mot binaire (B=2) :
bit b7 b6 b5 b4 b3 b2 b1 b0poids 27 26 25 24 23 22 21 20
exemple 0 1 1 0 1 0 1 1bi × 2i
valeur ( . . . . . . )10
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 . . . b1b0)2 =
∑n−1i=0 bi × 2i
Deuxième technique (formule de Horner)I On lit les bits de gauche à droite
I poids fort vers poids faibleI 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 b2 b0exemple 0 1 1 0 1 0 1 1N (0)
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Conversion décimal→ binaire
Méthode : Horner à l’enversI 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 b2 b0exemple 54
reste
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 à 9I les lettres latines a à f ou A à F (pour les valeurs 10 à 15)
I Un chiffre en base 16 peut remplacer 4 bitsI 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 01118 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 (NotationC/assembleur).
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 b2 b0retenue 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 — 2019–2020
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(ici sur 8 bits) ne sontpas des nombres en-tiers mathématiques (en-semble N) : ils se com-portent de manière cy-clique comme l’ensembleZ/256Z.
Débordement :I indicateur Carry
Et si on veut représenterles nombres négatifs?
(00000000)2
(0)10
+
(01111111)2
(127)10
(10000000)2
(128)10
−
(11111111)2
(255)10
Z/256Z
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Représentation des nombres négatifsPour représenter lesnombres négatifs, onchoisit de donner au bitde poids fort un poidsnégatif (-128) : il devientle bit de signe. On parlealors de nombres signés.
I (0xxxxxxx)2 :nombre positif
I (1xxxxxxx)2 :nombre négatif
Débordement :I indicateur oVerflow
(00000000)2
(0)10
+
(01111111)2
(127)10
(10000000)2
(−128)10
−
(11111111)2
(−1)10
Z/256Z
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 −NI 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 + 1On appelle (xxxxxxxx)2 + 1 le complément à 2 de (xxxxxxxx)2.
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 — 2019–2020
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 nombreen 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é ( siA < B ).
I L’indicateur V (de l’addition) indique toujours undébordement signé.
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 lamultiplication 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 lecas de la multiplication signée et de la multiplicationnon-signée.I 2 instructions assembleurs distinctes umull et smull.
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
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 b2 b01 1 1 0 1 0 1 1
× 1 0 1 1 0 0 1 111001101
résultat
Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Décalage à gauche
I LSL = Logical Shift LeftI paramètre = nombre de positions à décalerI bits de poids faible remplis avec des 0I 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 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Décalage logique à droite
I LSR = Logical Shift RightI paramètre = nombre de positions à décalerI bits de poids fort remplis avec des 0I 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 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Décalage arithmétique à droite
I ASR = Arithmetic Shift RightI paramètre = nombre de positions à décalerI bits de poids fort remplis avec des copies du bit de signeI 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 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
RotationsI ROR = ROtation Right, RRX = Rotation Right eXtendedI 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 — 2019–2020
Introduction Codage binaire Codage des nombres Arithmétique Décalages et rotations Arithmétique à Virgule
Calcul à virgule fixePrincipe :I Manipuler une valeur entière proportionnelle à la valeur à
virgule souhaitéeI Correspond à une fraction dont le dénominateur est
impliciteI Additions faciles si même dénominateur impliciteI 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 — 2019–2020
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) : signeI E (8 bits) : exposant entre 1 et 254
I cas particuliers pour E = 0 et E = 255I 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 — 2019–2020
top related