kv2004 发表于 2020-4-25 12:56:25

使用Arduino通用库,怎样对具体项目单独配置(头文件)?

如题:使用Arduino通用库,怎样对具体项目单独配置(头文件)?
比如:
    在Arduino安装目录(或系统的“文档”下面的Arduino目录)
       下面的libraries目录 里面放置xxxx库(比如 FreeRTOS900库)
         这个xxxx库,需要一个 配置文件 (.h),来达到不同的效果。
         这个xxxx库,里面有若干c/cpp文件,都include这个配置(.h)文件。

我在其他地方,自己的目录里面,建立了不同的多个工程,都用到了这个xxxx库,并且,我需要多种不同的配置。
进入Arduino的库目录里面,修改库里面的配置(.h)文件,这样做,不可能达到多个应用都用相同的配置。

我想,只有把配置文件(.h)放到本地工程里,并且删除库里面的配置文件,才能做到,但是,Arduino会报错,找不到 配置文件(.h)。
现在办法是把这个xxxx库里面的文件都平摊地拷贝到本地工程目录下面(不能有子目录),虽然能成功,但是太臃肿了。


有没有其他办法,“只”让配置文件 在自己本地工程的目录下?或者 怎样配置,让本地子目录中的程序也能自动让Aduino编译?

JY-MCU 发表于 2020-4-25 13:29:46

条件编译怎么样?设置几个条件,根据条件编译不同的配置

hjj0717 发表于 2020-4-25 14:59:54

你打开库中的文件看看,特别是对ESP32 UNO mega2560通用的库,在.H文件里面都写的有根据不同硬件去跳转不同的配置。。。#if ARDUINO >= 100   #include "Arduino.h" #else   #include "WProgram.h" #endif

kv2004 发表于 2020-4-25 15:48:02

上面的都不好,问题就是在哪里写配置,不是根据硬件,和软件也相关。

cantonguy 发表于 2020-6-17 15:46:09

我现在也很烦恼这个问题,IDE根本没提供全局宏定义的功能,不知道怎么搞
比如一个LCD库,上面有10个驱动,我有三个项目各用不同的驱动,但只能去库的头文件去改宏定义,这明显不合理,但又没找到好办法
现在只能很愚蠢的复制3个副本并且改名。。。

kv2004 发表于 2020-6-25 12:14:20

cantonguy 发表于 2020-6-17 15:46
我现在也很烦恼这个问题,IDE根本没提供全局宏定义的功能,不知道怎么搞
比如一个LCD库,上面有10个驱动, ...

复制副本 在安装目录或文档目录?这样的话会慢慢遗留很多副本,感觉不好。
我目前觉得 还是把用到的需要修改的库文件拷贝到本地比较好,毕竟是本地的应用太特殊了。

cantonguy 发表于 2020-6-25 15:32:04

kv2004 发表于 2020-6-25 12:14
复制副本 在安装目录或文档目录?这样的话会慢慢遗留很多副本,感觉不好。
我目前觉得 还是把用到的需要 ...

事实上想法是美好的,但ide没办法不这样做

kv2004 发表于 2020-6-25 19:15:21

cantonguy 发表于 2020-6-25 15:32
事实上想法是美好的,但ide没办法不这样做

它对文件的查找,先是本地,再是文档目录里的arduino目录,再是安装目录。所以把文件拷贝到本地以后,它就不管其他地方了,它会提示,一共有几个相同的,现在用的是哪个。反正我把库里src的cpp和h,都平摊到我本地的目录里面,我就想怎么改就怎么改了,不会影响到其他工程,就是看起来乱点。

cantonguy 发表于 2020-6-25 20:39:57

kv2004 发表于 2020-6-25 19:15
它对文件的查找,先是本地,再是文档目录里的arduino目录,再是安装目录。所以把文件拷贝到本地以后,它 ...

有两个ide可以做到,vscode和sloeber
但是这两个东西不反美根本没办法更新下载,尤其是vscode

dukelec 发表于 2020-6-26 11:36:35

4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。

kv2004 发表于 2020-6-27 00:04:01

dukelec 发表于 2020-6-26 11:36
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 ...

是的,都要放在一个目录下面。一锅粥一样。

wxws 发表于 2020-6-27 10:31:05

vscode+ platformIO

iamseer 发表于 2020-6-27 10:38:48

dukelec 发表于 2020-6-26 11:36
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 ...

这个应该是错怪了

https://github.com/arduino/Arduino/issues/5186

dukelec 发表于 2020-6-27 18:44:14

iamseer 发表于 2020-6-27 10:38
这个应该是错怪了

https://github.com/arduino/Arduino/issues/5186

好長,看不下去,你給總結一下吧。。。

而且,我當時看官方的代碼,他們自己都沒辦法選擇哪些 cpp 文件編譯,哪些不編譯,不想編譯的 cpp 文件,官方的做法是加一堆宏進行屏蔽,太亂了。。。

kv2004 发表于 2020-6-27 19:08:23

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

kv2004 发表于 2020-6-27 19:18:57

cantonguy 发表于 2020-6-25 20:39
有两个ide可以做到,vscode和sloeber
但是这两个东西不反美根本没办法更新下载,尤其是vscode ...

13楼解决了,许多文件放在一起,一锅粥的问题。我在15楼,试了一下。
对于特殊应用,我觉得还是把它拷贝到自己的子目录里面更好点,毕竟单片机程序可以很灵活,如果做到面面俱到,那么库就要有太多判断了。建立一堆相似的库,可能几个星期后,自己也分不清相似的库和库之间有什么区别。

kv2004 发表于 2020-6-27 19:21:11

dukelec 发表于 2020-6-27 18:44
好長,看不下去,你給總結一下吧。。。

而且,我當時看官方的代碼,他們自己都沒辦法選擇哪些 cpp 文件 ...

看看我15楼说的对不?{:lol:}

iamseer 发表于 2020-6-28 01:20:58

kv2004 发表于 2020-6-27 19:18
13楼解决了,许多文件放在一起,一锅粥的问题。我在15楼,试了一下。
对于特殊应用,我觉得还是把它拷贝 ...

对于要归档的项目,把库单独复制出来非常有必要。我遇到不止一次几个月以后由于库更新导致程序不工作的问题。

kv2004 发表于 2020-6-28 08:47:02

iamseer 发表于 2020-6-28 01:20
对于要归档的项目,把库单独复制出来非常有必要。我遇到不止一次几个月以后由于库更新导致程序不工作的问 ...

有道理,以后对所有的库都这样做--复制到本地src目录。
页: [1]
查看完整版本: 使用Arduino通用库,怎样对具体项目单独配置(头文件)?