使用Arduino通用库,怎样对具体项目单独配置(头文件)?
如题:使用Arduino通用库,怎样对具体项目单独配置(头文件)?比如:
在Arduino安装目录(或系统的“文档”下面的Arduino目录)
下面的libraries目录 里面放置xxxx库(比如 FreeRTOS900库)
这个xxxx库,需要一个 配置文件 (.h),来达到不同的效果。
这个xxxx库,里面有若干c/cpp文件,都include这个配置(.h)文件。
我在其他地方,自己的目录里面,建立了不同的多个工程,都用到了这个xxxx库,并且,我需要多种不同的配置。
进入Arduino的库目录里面,修改库里面的配置(.h)文件,这样做,不可能达到多个应用都用相同的配置。
我想,只有把配置文件(.h)放到本地工程里,并且删除库里面的配置文件,才能做到,但是,Arduino会报错,找不到 配置文件(.h)。
现在办法是把这个xxxx库里面的文件都平摊地拷贝到本地工程目录下面(不能有子目录),虽然能成功,但是太臃肿了。
有没有其他办法,“只”让配置文件 在自己本地工程的目录下?或者 怎样配置,让本地子目录中的程序也能自动让Aduino编译? 条件编译怎么样?设置几个条件,根据条件编译不同的配置 你打开库中的文件看看,特别是对ESP32 UNO mega2560通用的库,在.H文件里面都写的有根据不同硬件去跳转不同的配置。。。#if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif 上面的都不好,问题就是在哪里写配置,不是根据硬件,和软件也相关。 我现在也很烦恼这个问题,IDE根本没提供全局宏定义的功能,不知道怎么搞
比如一个LCD库,上面有10个驱动,我有三个项目各用不同的驱动,但只能去库的头文件去改宏定义,这明显不合理,但又没找到好办法
现在只能很愚蠢的复制3个副本并且改名。。。 cantonguy 发表于 2020-6-17 15:46
我现在也很烦恼这个问题,IDE根本没提供全局宏定义的功能,不知道怎么搞
比如一个LCD库,上面有10个驱动, ...
复制副本 在安装目录或文档目录?这样的话会慢慢遗留很多副本,感觉不好。
我目前觉得 还是把用到的需要修改的库文件拷贝到本地比较好,毕竟是本地的应用太特殊了。 kv2004 发表于 2020-6-25 12:14
复制副本 在安装目录或文档目录?这样的话会慢慢遗留很多副本,感觉不好。
我目前觉得 还是把用到的需要 ...
事实上想法是美好的,但ide没办法不这样做 cantonguy 发表于 2020-6-25 15:32
事实上想法是美好的,但ide没办法不这样做
它对文件的查找,先是本地,再是文档目录里的arduino目录,再是安装目录。所以把文件拷贝到本地以后,它就不管其他地方了,它会提示,一共有几个相同的,现在用的是哪个。反正我把库里src的cpp和h,都平摊到我本地的目录里面,我就想怎么改就怎么改了,不会影响到其他工程,就是看起来乱点。 kv2004 发表于 2020-6-25 19:15
它对文件的查找,先是本地,再是文档目录里的arduino目录,再是安装目录。所以把文件拷贝到本地以后,它 ...
有两个ide可以做到,vscode和sloeber
但是这两个东西不反美根本没办法更新下载,尤其是vscode 4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 dukelec 发表于 2020-6-26 11:36
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 ...
是的,都要放在一个目录下面。一锅粥一样。 vscode+ platformIO
dukelec 发表于 2020-6-26 11:36
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 ...
这个应该是错怪了
https://github.com/arduino/Arduino/issues/5186 iamseer 发表于 2020-6-27 10:38
这个应该是错怪了
https://github.com/arduino/Arduino/issues/5186
好長,看不下去,你給總結一下吧。。。
而且,我當時看官方的代碼,他們自己都沒辦法選擇哪些 cpp 文件編譯,哪些不編譯,不想編譯的 cpp 文件,官方的做法是加一堆宏進行屏蔽,太亂了。。。 iamseer 发表于 2020-6-27 10:38
这个应该是错怪了
https://github.com/arduino/Arduino/issues/5186
{:handshake:}
看来确实是错怪了。
试了一下:
根目录建立文件test.ino:
#include "src/a/a.h"
#include "src/b/b.h"
void setup() {
// put your setup code here, to run once:
aa();
bb();
}
void loop() {
// put your main code here, to run repeatedly:
}
然后,子目录src下面建立两个目录 a 和 b
src---a
|-b
目录a下面,建立两个文件 a.h 和 a.cpp
目录b下面,建立两个文件 b.h 和 b.cpp
a.h:
extern int a;
extern void aa(void);
a.cpp
int a;
void aa(void)
{
a=1;
}
b.h b.cpp类似
成功编译。
总结一下,就是,子模块,必须放在 src 目录下面,然后是各个模块目录,模块目录里面是 h 文件 和 c或cpp 文件。
就是类似这种形式:
│test.ino
│
└─src
├─模块a
│ a.cpp
│ a.h
│
└─模块b
b.cpp
b.h
cantonguy 发表于 2020-6-25 20:39
有两个ide可以做到,vscode和sloeber
但是这两个东西不反美根本没办法更新下载,尤其是vscode ...
13楼解决了,许多文件放在一起,一锅粥的问题。我在15楼,试了一下。
对于特殊应用,我觉得还是把它拷贝到自己的子目录里面更好点,毕竟单片机程序可以很灵活,如果做到面面俱到,那么库就要有太多判断了。建立一堆相似的库,可能几个星期后,自己也分不清相似的库和库之间有什么区别。 dukelec 发表于 2020-6-27 18:44
好長,看不下去,你給總結一下吧。。。
而且,我當時看官方的代碼,他們自己都沒辦法選擇哪些 cpp 文件 ...
看看我15楼说的对不?{:lol:} kv2004 发表于 2020-6-27 19:18
13楼解决了,许多文件放在一起,一锅粥的问题。我在15楼,试了一下。
对于特殊应用,我觉得还是把它拷贝 ...
对于要归档的项目,把库单独复制出来非常有必要。我遇到不止一次几个月以后由于库更新导致程序不工作的问题。 iamseer 发表于 2020-6-28 01:20
对于要归档的项目,把库单独复制出来非常有必要。我遇到不止一次几个月以后由于库更新导致程序不工作的问 ...
有道理,以后对所有的库都这样做--复制到本地src目录。
页:
[1]