Les nombres à l'intérieur des microcontrôleurs typiques n'ont pas du tout de virgule décimale. Ce sont des entiers binaires. Il n'y a pas de décimales à l'intérieur de la machine. Le compilateur ou l'assembleur peut vous permettre de spécifier des constantes de cette façon, mais elles sont converties en binaire avant que la machine ne les voie.
Cependant, vous pouvez décider quelles unités vous souhaitez pour les valeurs entières. Par exemple, supposons que vous vouliez représenter des dollars dans un micro. Il ne peut pas nativement faire 3,21 $, mais il pourrait faire 321 cents. Le micro fonctionne juste sur la valeur 321, mais vous savez qu'il représente des unités de 1/100 de dollars.
Ce n'est qu'un exemple pour illustrer le concept d'unités arbitraires. Souvent, les nombres sont représentés avec plusieurs bits de fraction binaire. Cela revient à dire que chaque comptage représente une valeur de 2 -N , où N est le nombre de bits de fraction. Cette représentation est appelée "point fixe". Vous décidez dès le départ de la résolution dont vous avez besoin et prétendez qu'il y a suffisamment de bits à droite du point binaire imaginé pour prendre en charge cette résolution. Par exemple, disons que vous devez représenter quelque chose à au moins une résolution de 1/100. Dans ce cas, vous utiliseriez au moins 7 bits de fraction puisque 2 7 = 128. Cela vous donnera en fait une résolution de 1/128.
La machine n'a aucune idée que cela se passe. Il va ajouter et soustraire ces nombres sous forme d'entiers ordinaires, mais tout fonctionne toujours. Cela devient un peu délicat lorsque vous multipliez et divisez des valeurs à virgule fixe. Le produit de deux valeurs à virgule fixe avec N bits de fraction aura 2N bits de fraction. Parfois, vous gardez simplement une trace du fait que le nouveau nombre a 2N bits de fraction, ou parfois vous pouvez le déplacer à droite de N bits pour revenir à la même représentation qu'auparavant.
La virgule flottante est la même chose, mais le nombre de bits de fraction est stocké avec la partie entière afin que cet ajustement puisse être effectué lors de l'exécution. L'exécution d'opérations mathématiques sur des nombres à virgule flottante peut prendre plusieurs cycles. Le matériel à virgule flottante fait tout cela pour vous afin que les opérations se terminent rapidement. Cependant, les mêmes manipulations peuvent également être effectuées dans le logiciel. Il n'y a aucune raison pour laquelle vous ne pouvez pas écrire un sous-programme pour ajouter deux nombres à virgule flottante, juste que cela prendrait beaucoup plus de temps qu'un matériel dédié faisant la même chose.
J'ai défini un format à virgule flottante de 3 octets pour les PIC 8 bits et écrit un tas de routines pour les manipuler. Les microcontrôleurs traitent généralement des valeurs réelles avec une précision de 10 ou 12 bits au plus. Mon format à virgule flottante utilise 16 bits de précision, ce qui est suffisant pour plusieurs calculs intermédiaires.
J'ai également un format 32 bits pour les PIC 16 bits. Cela utilise un mot de 16 bits pour la mantisse, ce qui accélère les calculs car ces PIC peuvent fonctionner sur 16 bits à la fois.
Ces routines sont incluses dans ma version des outils de développement PIC . Après l'installation, regardez les fichiers avec "fp24" dans leur nom dans le répertoire SOURCE> PIC et "fp32f" dans le répertoire SOURCE> DSPIC.