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

3

Sé que <math.h> puede ser una gran cantidad de código para incluir, pero quiero probar algo usando sinf() en un PIC de bajo costo. ¿Hay una versión reducida de math.h que está utilizando el compilador XC8? ¿Por qué no se define sin() o sinf() ?

#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
  }
}
    
pregunta tarabyte

2 respuestas

17

El enfoque de la codificación con poca memoria es no usar math.h, y en su lugar usar INTEGERS, tablas de búsqueda, interpolación, y quizás expansiones de la Serie Taylor (u otras). Calcule cuánto error puede tolerar (y cómo se acumula ese error) y diseñe su código para eso.

Revisión de aproximación de trigon de Niza en enlace

    
respondido por el Scott Seidman
8

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

Para responder a su pregunta real, está incluyendo el archivo math.h correctamente.

Como puede ver en las sentencias # ifdef / # endif, si observa el archivo math.h, el núcleo PIC12 no es compatible con las 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, es compatible con doble pecado (doble), no flotante.

Sugeriría considerar un núcleo PIC18 (sobre PIC16) si pretende realizar cálculos de punto flotante. La diferencia de precio suele ser bastante nominal, y puede obtener velocidades de reloj muy altas (32MHz o 64MHz). O cree a mano algún ensamblador / código entero como si fuera 1995.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas