Eu preciso fazer transformações rotacionais (e outras) em um aplicativo incorporado, exigindo as funções sin () cos () e tan (). Eu sei que você pode usar tabelas de consulta, e essa é a única solução que eu poderia encontrar fazendo minha própria pesquisa, mas existe uma boa biblioteca de triggers de ponto fixo por aí?
Estou pensando em usar um córtex M3 para o aplicativo, então quero ficar longe do ponto flutuante o máximo possível para manter os aplicativos compactos.
Respostas:
Uma boa abordagem para fazer trigonometria em aplicativos incorporados é usar aproximações polinomiais para as funções necessárias. O código é compacto, os dados consistem em alguns coeficientes e as únicas operações necessárias são multiplicar e adicionar / subtrair. Muitos sistemas embarcados possuem multiplicadores de hardware, oferecendo bom desempenho.
fonte
_Fract
é um pedaço de porcaria IMHO; Eu odeio o fato de ter sido "padronizado" pelo comitê C. Obriga você a usar o Q15 ou Q31 para tudo, o que não faz sentido em muitas situações, e deixa você sem recursos para ajudá-lo.Você se opõe a usar as bibliotecas Cortex de ponto fixo para isso?
de:
Ele usa uma tabela de pesquisa com interpolação quadrática, mas é bem rápida. Você pode adaptá-lo à interpolação linear para obter velocidade mais rápida, mas com mais erros.
Observe também que mesmo o Cortex M4 não possui necessariamente FPU. Eu os vi chamados "M4F", se o fizerem.
fonte