gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:57:18 27 4
gpt4 key购买 nike

我有一个简单的 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
mycLibInit(int)'

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

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

有没有办法告诉 Arduino IDE“嘿,这个函数是这个 C 库的一部分”,或者我应该将我的功能重写到 C++ 类中吗?它不是我最喜欢的解决方案,因为其他项目中正在使用相同的 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;
}

关于c - 如何在arduino中使用标准c头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28861621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com