Arduinoのスケッチを使用してCファイルに含まれている関数を呼び出す方法があるかどうか知りたいのですが?
私のCファイルは関数を宣言して定義しています。乱雑な関数定義をArduinoスケッチに配置することを節約するために、関数をスケッチから直接呼び出します。
ArduinoとCを使用してこれを行う標準的な方法はありますか?これがスケッチです:
#include "crc16.h";
void setup(){
}
void loop(){
CalculateCRC16("<09M", 4);
}
これはトリミングされた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;
}
ファイルでC ++ではなくCを使用する必要がある理由はありますか?
—
Peter Bloomfield
実はそうです。私はC ++を使用してファイルをコンパイルしようとすると、そこにエラーがありますが、それはエラーがラインによって引き起こされるC.にエラーフリーである:
—
user_name 2014年
const void *c_ptr
とconst uint8_t *c = c_ptr;
。エラーメッセージは、タイプ間の無効な変換について言及しています。
エラーを生成する2つのコードファイル(またはそれらの簡略化された最小バージョン)を投稿して、エラーメッセージ全体をコピーして貼り付けてもらえますか?
—
drodri 2014年
エラーメッセージはそれほどきれいではありません
—
user_name
In function uint16_t CalculateCRC16(uint16_t, const void*, size_t)': 46 invalid conversion from
。constvoid * '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.)