2010-09-24 3 views
3

Je travaille sur le microcontrôleur OKI 431. C'est un microcontrôleur 8 bits. Nous n'aimons pas effectuer d'opérations flottantes dans notre projet. Nous avons donc éliminé toutes les opérations à virgule flottante et les avons converties en opérations entières d'une manière ou d'une autre. Mais nous ne pouvons pas éliminer une opération en virgule flottante, car l'optimisation du calcul pour l'opération d'entiers nécessite un entier de 64 bits que le micro ne supporte pas nativement. Il a compilateur C qui prend en charge jusqu'à l'opération d'entier 32 bits. Le calcul prend trop de temps ce qui est perceptible d'une manière à l'utilisateur.Implémentation d'un nombre entier de 64 bits pour un microcontrôleur 8 bits

Je me demande s'il existe une bibliothèque d'entiers 64 bits qui peut être facilement utilisée en C pour le codage microcontoller. Ou quel est le moyen le plus simple d'écrire une telle chose efficacement? Ici implique efficacement minimiser le temps requis.

Merci d'avance.

+0

Êtes-vous sûr compilateur ne supporte pas des entiers longs 64 bits unsing unsigned long long ou similaire? – Bogi

+0

oui je suis sûr. C'est surprenant mais le compilateur est très basique. – Donotalo

+0

Pourquoi 64 bits sont-ils requis? Quel type d'opération est-ce? – phkahler

Répondre

1

Vous devrez peut-être monter dans l'assemblage pour cela. Les choses évidentes dont vous avez besoin sont:

  • plus

  • 2s complément (inverti et incrément)

  • décalage arithmétique gauche et à droite par 1

De ceux que vous pouvez Construire la soustraction, la multiplication, la division longue et les quarts plus longs. Gardez à l'esprit que la multiplication de deux nombres de 64 bits vous donne un nombre de 128 bits, et une division longue peut nécessiter un dividende de 128 bits.

Il semblerait terriblement lent, mais l'hypothèse dans une telle machine est que vous avez besoin d'un faible encombrement, pas de vitesse. Je suppose que vous faites ces calculs à la fréquence la plus basse possible.

Une bibliothèque open-source peut avoir un moyen un peu plus rapide de le faire, mais elle peut également être encore plus lente.

+0

sur la fréquence de calcul: le calcul doit être effectué périodiquement. la période minimale est de 10 secondes. – Donotalo

+0

@Donotalo: Si l'horloge de base était 1mhz, je devinerais une multiplication ou une division de l'ordre d'une milliseconde, ce qui devrait être OK. –

+1

@Donotalo: Bien sûr, une bibliothèque logicielle de base à virgule flottante IEEE de base serait également dans la même gamme, et ne serait pas d'origine locale. Votre compilateur vient probablement avec un. –

3

Comme il s'agit d'un micro-contrôleur, vous voudrez probablement utiliser une bibliothèque d'assemblage simple. Moins il doit supporter d'opérations, plus il peut être simple et petit. Vous pouvez également constater que vous pouvez vous en sortir avec des nombres plus petits que 64 bits (48 bits, peut-être) et réduire le temps d'exécution et les exigences de registre.

+0

Oui puisque le microcontrôleur est à 8 bits, un multiple de 8 suffit. Certains compilateurs pour les microcontrôleurs 8 bits ont même une option pour un flottement de 24 bits. L'extension des calculs 64 bits ralentit –

Questions connexes