Systèmes embarqués et firmware

Sur un microcontrôleur 8 bits, une interruption de temporisateur incrémente une variable 32 bits ticks, et le traitement principal lit ticks pour calculer le temps écoulé. Quelle est la cause des valeurs parfois très erronées ?

  1. AUn microcontrôleur 8 bits ne peut pas utiliser de variables 32 bits
  2. BLa période de l'interruption de temporisateur varie aléatoirement à chaque fois
  3. CLa lecture 32 bits se fait en quatre fois, et une interruption survenant au milieu peut ne mettre à jour qu'une partie des octets
Afficher la réponse et l'explication

Réponse : C. La lecture 32 bits se fait en quatre fois, et une interruption survenant au milieu peut ne mettre à jour qu'une partie des octets

Un microcontrôleur 8 bits ne lit qu'un octet à la fois et lit donc une valeur 32 bits en quatre fois. Par exemple, au passage de 0x000000FF à 0x00000100, si une interruption survient après la lecture de l'octet de poids faible, on combine l'ancien poids faible (0xFF) et le nouveau poids fort (0x01) et l'on obtient une valeur comme 0x000001FF. On l'évite en interdisant les interruptions pendant la lecture, ou en relisant jusqu'à obtenir deux lectures identiques.

S'entraîner sur ce thème Retour au thème

Autres questions sur Systèmes embarqués et firmware

  1. Quelle caractéristique de la communication série par UART est correcte ?
  2. Pour un UART à 115200 bps au format 8 bits de données, sans parité, 1 bit de stop (8N1), quelle valeur est la plus proche du nombre d'octets transmissibles par seconde ?
  3. Un léger écart de débit en bauds entre émetteur et récepteur UART peut produire des caractères corrompus. Pourquoi l'écart admissible est-il limité à quelques % environ ?
  4. Quelle caractéristique de la communication SPI est correcte ?
  5. Quelle combinaison correspond aux quatre signaux couramment utilisés en SPI ?

Comparatifs sur ce thème