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 ?
- AUn microcontrôleur 8 bits ne peut pas utiliser de variables 32 bits
- BLa période de l'interruption de temporisateur varie aléatoirement à chaque fois
- 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.
Continuer : 9 autres questions sur Systèmes embarqués et firmware