J'ai besoin de faire des transformations rotationnelles (et autres) dans une application embarquée, nécessitant les fonctions sin () cos () et tan (). Je sais que vous pouvez utiliser des tables de recherche, et c'est la seule solution que je pourrais trouver en faisant mes propres recherches, mais y a-t-il une bonne bibliothèque de trig à virgule fixe?
Je pense utiliser un cortex M3 pour l'application, donc je veux rester le plus loin possible de la virgule flottante pour garder les applications zippées.
Réponses:
Une bonne approche pour faire de la trigonométrie dans des applications embarquées consiste à utiliser des approximations polynomiales des fonctions dont vous avez besoin. Le code est compact, les données se composent de quelques coefficients et les seules opérations requises sont la multiplication et l'addition / la soustraction. De nombreux systèmes embarqués ont des multiplicateurs matériels, ce qui donne de bonnes performances.
la source
_Fract
est un morceau de merde IMHO; Je déteste le fait qu'il ait été "standardisé" par le comité C. Cela vous oblige à utiliser Q15 ou Q31 pour tout, ce qui n'a pas de sens dans de nombreuses situations, et vous laisse bloqué sans aide pour ces situations.Êtes-vous opposé à l'utilisation des bibliothèques Cortex à virgule fixe pour cela?
de:
Il utilise une table de recherche avec interpolation quadratique, mais c'est assez rapide. Vous pouvez l'adapter à une interpolation linéaire pour une vitesse plus rapide mais plus d'erreurs.
Notez également que même Cortex M4 n'a pas nécessairement de FPU. Je les ai vus appelés "M4F" s'ils le font.
la source