Ich möchte wissen, ob es eine Möglichkeit gibt, Funktionen, die in C-Dateien enthalten sind, mithilfe einer Arduino-Skizze aufzurufen.
Meine C-Datei deklariert und definiert eine Funktion. Um zu vermeiden, dass die unordentliche Funktionsdefinition in meine Arduino-Skizze eingefügt wird, möchte ich die Funktion direkt aus der Skizze aufrufen.
Gibt es eine Standardmethode, um dies mit Arduino und C zu tun? Hier ist die Skizze:
#include "crc16.h";
void setup(){
}
void loop(){
CalculateCRC16("<09M", 4);
}
und dies ist die abgespeckte C-Datei:
#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
Nutzername
quelle
quelle
const void *c_ptr
und verursachtconst uint8_t *c = c_ptr;
. Die Fehlermeldung erwähnt eine ungültige Konvertierung zwischen Typen.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.)
Antworten:
Sie können extern "C" #include wie folgt einschließen:
Und die Datei crc16.h könnte sein (einige kleinere Korrekturen, das #pragma einmal, eine Besetzung):
quelle
Ihre CRC-Funktion kann einfach in C ++ konvertiert werden, sodass sie in eine * .cpp-Datei verschoben werden kann. Alles, was Sie tun müssen, ist eine explizite Umwandlung zu verwenden, wenn Sie Ihren
c
Zeiger initialisieren . Hier ist der 'richtige' C ++ - Weg, dies zu tun:Eine alte Besetzung im C-Stil würde jedoch auch funktionieren:
Das Problem ist im Grunde, dass C etwas toleranter sein kann, wenn Sie Zeiger implizit zwischen Typen konvertieren lassen. Um dies in C ++ zu tun, müssen Sie dem Compiler explizit mitteilen, dass die Konvertierung beabsichtigt ist.
quelle
Ja, kopieren Sie einfach die Deklarationszeile in Ihre Skizze:
quelle