Chciałbym wiedzieć, czy istnieje sposób wywoływania funkcji zawartych w plikach C przy użyciu szkicu Arduino?
Mój plik C deklaruje i definiuje funkcję. Aby zapisać umieszczenie definicji niechlujnej funkcji w moim szkicu Arduino, chciałbym wywołać funkcję bezpośrednio ze szkicu.
Czy istnieje standardowy sposób na wykonanie tego przy użyciu Arduino i C? Oto szkic:
#include "crc16.h";
void setup(){
}
void loop(){
CalculateCRC16("<09M", 4);
}
a to jest przycięty plik C:
#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
Nazwa Użytkownika
źródło
źródło
const void *c_ptr
iconst uint8_t *c = c_ptr;
. Komunikat o błędzie wspomina o niepoprawnej konwersji między typami.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.)
Odpowiedzi:
Możesz dodać „C” #include w następujący sposób:
Plik crc16.h może być (kilka drobnych poprawek, #pragma raz, rzutowanie):
źródło
Twoja funkcja CRC może być łatwo przekonwertowana do C ++, dzięki czemu można przejść do pliku * .cpp. Wszystko, co musisz zrobić, to użyć jawnego rzutowania podczas inicjalizacji
c
wskaźnika. Oto „właściwy” sposób na zrobienie tego w C ++:Jednak działałaby również stara obsada w stylu C:
Problem polega na tym, że C może być nieco bardziej liberalny, pozwalając na niejawną konwersję wskaźników między typami. Aby to zrobić w C ++, musisz wyraźnie powiedzieć kompilatorowi, że konwersja jest zamierzona.
źródło
Tak, po prostu skopiuj jego linię deklaracji do szkicu:
źródło