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

时间:2015-03-04 18:02:55

标签: c arduino header-files

我有一个简单的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 to中mycLibInit(int)&#39;

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

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

有没有办法告诉Arduino IDE&#34;嘿,这个功能是 C 库的一部分&#34;或者,我应该将我的功能重写为c ++类吗?它不是我最喜欢的解决方案,因为在其他项目中使用了相同的c-Module。 (我知道我可能会使用预处理程序指令将代码放在同一个地方,但它不是一个很好的解决方案!)

2 个答案:

答案 0 :(得分:8)

你必须告诉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;
}

答案 1 :(得分:0)

此问题已在此处讨论过:

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

希望它有所帮助。