3 votos

¿Cómo incluir math.h en un PIC?

Lo sé. <math.h> puede ser una gran cantidad de código para incluir, pero quiere probar algo usando sinf() en un PIC de bajo coste. ¿Existe una versión reducida de math.h que utiliza el compilador XC8? ¿Por qué ninguno de los dos sin() o sinf() definido?

#include <xc.h>
#include <math.h>

#define DELTA_RAD   0.01

void main(void) {
  float x = 0.0;
  float y;

  while (1) {
    x += DELTA_RAD;
    y = sinf(x);  // <-- ERROR on this line

    // Do something with y
  }
}

17voto

shash Puntos 668

El enfoque para la codificación de baja memoria es no utilizar math.h, y en su lugar utilizar INTEGERS, tablas de búsqueda, interpolación, y tal vez Taylor Series (u otros) expansiones. Calcula cuánto error puedes tolerar (y cómo se acumula ese error), y diseña tu código de acuerdo con eso.

Buena revisión de la aproximación trigonométrica en http://www.ganssle.com/articles/atrig.htm

8voto

Spehro Pefhany Puntos 90994

Deberías mirar el archivo math.h y averiguarlo (tm). También sería útil si se menciona el número de parte PIC real que está tratando de utilizar.

Para responder a tu pregunta, estás incluyendo el archivo math.h correctamente.

Como puedes ver en las declaraciones #ifdef/#endif, si miras el fichero math.h, el núcleo del PIC12 no soporta funciones trascendentales. Eso no significa nada con una palabra de instrucción de 12 bits como PIC16F54 o PIC12F509. Para núcleos más capaces, está soportado para double sin(double), no float.

Yo sugeriría considerar un núcleo PIC18 (sobre PIC16) si usted tiene la intención de hacer cálculos en coma flotante. La diferencia de precio suele ser bastante nominal, y puedes conseguir velocidades de reloj muy altas (32MHz o 64MHz). O crea a mano algún código ensamblador/integrador como si fuera 1995.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X