我想知道是否有一种方法可以使用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 ++?
                
                
                  
                    —
                    彼得·布卢姆菲尔德
                    
                  
                
              
                  其实,是。当我尝试使用C ++编译文件时,出现了错误,但是在C语言中没有错误。该错误是由以下行引起的:
                
                  
                    —
                    user_name 2014年
                    
                  
                
              const void *c_ptr和const uint8_t *c = c_ptr;。该错误消息提到类型之间的无效转换。
                
                  您能否张贴产生错误的2个代码文件(或它们的简化最小版本),然后完整复制并粘贴错误消息?
                
                
                  
                    —
                    drodri 2014年
                    
                  
                
              
                  错误消息不是很漂亮:   
                
                  
                    —
                    user_name 2014年
                    
                  
                
              In function uint16_t CalculateCRC16(uint16_t, const void*, size_t)':  46 invalid conversion from const void *'const 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.)