如何在arduino中使用标准c头文件

how to use standard c header files in arduino

我有一个简单的 C 库,如下所示:

//mycLib.h
#ifndef _MY_C_LIB_h
#define _MY_C_LIB_h                   
    typedef struct {char data1;
                    int data2;
                    } sampleStruct;             

    extern void mycLibInit(int importantParam);
    extern void mycLibDoStuff(char anotherParam);

    extern void sampleStruct mycLibGetStuff();
#endif



//mycLib.c
sampleStruct _sample;
void mycLibInit(int importantParam)
{
    //init stuff!
    //lets say _sample.data2 = importantParam
}

void mycLibDoStuff(char anotherParam)
{
    //do stuff!
    //lets say _sample.data1 = anotherParam
}

sampleStruct mycLibGetStuff()
{
    //return stuff, 
    // lets say return _sample;
}

从其他测试软件调用时效果很好。然而,作为另一个项目的一部分,我必须将它包含在一个 Arduino 项目中并编译它以在该平台上工作。不幸的是,当我 运行 我的 Arduino 代码如下所示时:

#include <mycLib.h>

void setup()
{
  mycLibInit(0);
}

void loop()
{
}

我得到以下编译错误: code.cpp.o: 在函数 setup': C:\Program Files (x86)\Arduino/code.ino:6: undefined reference tomycLibInit(int)'

我在 Arduino 网站上阅读了以下主题:

但在所有这些情况下,外部库都是 c++ class 的形式,在 Arduino 代码中调用构造函数。

有没有办法告诉 Arduino IDE "hey this function is part of this C library" 或者,我应该将我的功能重写到 c++ classes 中吗?它不是我最喜欢的解决方案,因为其他项目中正在使用相同的 c-Module。 (我知道我可能可以使用预处理器指令将代码放在同一个地方,但这不是一个很好的解决方案!)

你必须告诉 Arduino 你的库使用 C 命名。 Arduino代码中可以直接使用extern "C"

下一个代码在 Arduino IDE 1.05.

中编译
extern "C"{
  #include <mycLib.h>
}

void setup()
{
  mycLibInit(0);
}

void loop()
{
}

mycLib.h

#ifndef _MY_C_LIB_h
#define _MY_C_LIB_h

typedef struct {char data1;
                int data2;
                } sampleStruct;

  void mycLibInit(int importantParam);
  void mycLibDoStuff(char anotherParam);

  sampleStruct mycLibGetStuff();

#endif

mycLib.c:

#include "mycLib.h"
sampleStruct _sample;
void mycLibInit(int importantParam)
{
    //init stuff!
    //lets say _sample.data2 = importantParam
}

void mycLibDoStuff(char anotherParam)
{
    //do stuff!
    //lets say _sample.data1 = anotherParam
}

sampleStruct mycLibGetStuff()
{
    //return stuff, 
    // lets say return _sample;
}

这个问题已经在这里讨论过:

https://arduino.stackexchange.com/questions/946/how-to-call-c-functions-from-arduino-sketch

希望对您有所帮助。