Microcontroleurs I - Introduction aux microcontrôleurs et ......Microcontroleurs I — P. Corbineau...

30
Microcontroleurs I Introduction aux microcontrôleurs et Calcul binaire Pierre Corbineau IESE3 S5 2020–2021

Transcript of Microcontroleurs I - Introduction aux microcontrôleurs et ......Microcontroleurs I — P. Corbineau...

  • Microcontroleurs I

    Introduction aux microcontrôleurs et Calculbinaire

    Pierre Corbineau

    IESE3 S5

    2020–2021

  • 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)

    [email protected] bI Sylvain Toru & Frédéric Rousseau (TD, TP)

    [email protected] [email protected] b

    I Liliana Andrade (TP)[email protected] b

    I 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 = ( . . . . . . . . . . . . . . . . . . )2Utilisations :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 — 2020–2021

  • 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 — 2020–2021

  • 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 × 2ivaleur ( . . . . . . )10

    Microcontroleurs I — P. Corbineau Cours 0 IESE3 S5 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

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

    Représentation des nombres négatifs

    Pour 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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 — 2020–2021

  • 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)2I 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 — 2020–2021

    Introduction aux microcontrôleurs** * **

    Codage binaire** * **

    Codage des nombres** * **

    Arithmétique** * **

    Décalages et rotations** * **

    Arithmétique à Virgule** * **