Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 ·...

8
Microcontroleurs I Introduction aux microcontrôleurs et Calcul binaire 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) [email protected] b I Sylvain Toru (TD, TP) [email protected] b I Frederic Rousseau (TP) [email protected] 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 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 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 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

Transcript of Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 ·...

Page 1: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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)

[email protected] bI Sylvain Toru (TD, TP)

[email protected] bI Frederic Rousseau (TP)

[email protected] 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

Page 2: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 3: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 4: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 5: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 6: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 7: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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

Page 8: Microcontroleurs I - Introduction aux microcontrôleurs et Calcul … · 2020-05-25 · Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2019–2020 Introduction Codage binaire

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