如何在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 to
mycLibInit(int)'
中
我在 Arduino 网站上阅读了以下主题:
- http://www.arduino.cc/en/hacking/libraries
- http://playground.arduino.cc/Code/Library
- http://forum.arduino.cc/index.php?topic=37371.0
- http://arduino.cc/en/Hacking/BuildProcess
但在所有这些情况下,外部库都是 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
希望对您有所帮助。
我有一个简单的 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)'
我在 Arduino 网站上阅读了以下主题:
- http://www.arduino.cc/en/hacking/libraries
- http://playground.arduino.cc/Code/Library
- http://forum.arduino.cc/index.php?topic=37371.0
- http://arduino.cc/en/Hacking/BuildProcess
但在所有这些情况下,外部库都是 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
希望对您有所帮助。