Me gustaría saber si hay una manera de llamar a las funciones que están contenidas en los archivos C utilizando un boceto Arduino.
Mi archivo C declara y define una función. Para guardar poner la definición de función desordenada en mi boceto Arduino, me gustaría llamar a la función directamente desde el boceto.
¿Hay una forma estándar de hacer esto usando Arduino y C? Aquí está el boceto:
#include "crc16.h";
void setup(){
}
void loop(){
CalculateCRC16("<09M", 4);
}
y este es el archivo C recortado:
#include <stdio.h>
#include <stdint.h>
uint16_t crctable[256] =
{
0x0000, 0x1189,.....
uint16_t // Returns Calculated CRC value
CalculateCRC16( // Call example CalculateCRC16("<09M", 4);
const void *c_ptr, // Pointer to byte array to perform CRC on
size_t len) // Number of bytes to CRC
{
uint16_t crc = 0xFFFF // Seed for CRC calculation
const uint8_t *c = c_ptr;
while (len--)
crc = (crc << 8) ^ crctable[((crc >> 8) ^ *c++)];
return crc;
}
arduino-uno
software
c
nombre_usuario
fuente
fuente
const void *c_ptr
yconst uint8_t *c = c_ptr;
. El mensaje de error menciona una conversión no válida entre tipos.In function uint16_t CalculateCRC16(uint16_t, const void*, size_t)': 46 invalid conversion from
const void * 'toconst uint8_t*' In function int main()': 57 system' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.)
Respuestas:
Puede externar "C" #incluir de la siguiente manera:
Y el archivo crc16.h podría ser (algunas correcciones menores, el #pragma una vez, un reparto):
fuente
Su función CRC se puede convertir fácilmente a C ++ para que pueda ir a un archivo * .cpp. Todo lo que necesita hacer es usar una conversión explícita cuando inicializa su
c
puntero. Aquí está la forma 'adecuada' de C ++ para hacerlo:Sin embargo, un antiguo elenco de estilo C también funcionaría:
El problema es básicamente que C puede ser un poco más permisivo al permitirle convertir punteros implícitamente entre tipos. Para hacerlo en C ++, debe decirle explícitamente al compilador que la conversión es intencional.
fuente
Sí, solo copie su línea de declaración en su boceto:
fuente