搜索
bottom↓
回复: 18

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

[复制链接]
(30357708)

出0入8汤圆

发表于 2020-4-25 12:56:25 | 显示全部楼层 |阅读模式
如题:使用Arduino通用库,怎样对具体项目单独配置(头文件)?
比如:
    在Arduino安装目录(或系统的“文档”下面的Arduino目录)
       下面的libraries目录 里面放置xxxx库(比如 FreeRTOS900库)
           这个xxxx库,需要一个 配置文件 (.h),来达到不同的效果。
           这个xxxx库,里面有若干c/cpp文件,都include这个配置(.h)文件。

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

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


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

出0入0汤圆

发表于 2020-4-25 13:29:46 | 显示全部楼层
条件编译怎么样?设置几个条件,根据条件编译不同的配置
(30350299)

出0入0汤圆

发表于 2020-4-25 14:59:54 | 显示全部楼层
你打开库中的文件看看,特别是对ESP32 UNO mega2560通用的库,在.H文件里面都写的有根据不同硬件去跳转不同的配置。。。  #if ARDUINO >= 100     #include "Arduino.h" #else     #include "WProgram.h" #endif
(30347411)

出0入8汤圆

 楼主| 发表于 2020-4-25 15:48:02 | 显示全部楼层
上面的都不好,问题就是在哪里写配置,不是根据硬件,和软件也相关。
(25768324)

出20入0汤圆

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

出0入8汤圆

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

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

出20入0汤圆

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

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

出0入8汤圆

 楼主| 发表于 2020-6-25 19:15:21 | 显示全部楼层
cantonguy 发表于 2020-6-25 15:32
事实上想法是美好的,但ide没办法不这样做

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

出20入0汤圆

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


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

出0入88汤圆

发表于 2020-6-26 11:36:35 | 显示全部楼层
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。
(24960852)

出0入8汤圆

 楼主| 发表于 2020-6-27 00:04:01 | 显示全部楼层
dukelec 发表于 2020-6-26 11:36
4 年前,我試了下 Arduino,我發現,工程目錄下竟然不能建子目錄放代碼,然後加入再也不用系列。。。 ...

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

出0入8汤圆

发表于 2020-6-27 10:31:05 | 显示全部楼层
vscode+ platformIO
(24922765)

出0入24汤圆

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

这个应该是错怪了

https://github.com/arduino/Arduino/issues/5186
(24893639)

出0入88汤圆

发表于 2020-6-27 18:44:14 | 显示全部楼层
iamseer 发表于 2020-6-27 10:38
这个应该是错怪了

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

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

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

出0入8汤圆

 楼主| 发表于 2020-6-27 19:08:23 | 显示全部楼层
iamseer 发表于 2020-6-27 10:38
这个应该是错怪了

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


看来确实是错怪了。

试了一下:
根目录建立文件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

(24891556)

出0入8汤圆

 楼主| 发表于 2020-6-27 19:18:57 | 显示全部楼层
cantonguy 发表于 2020-6-25 20:39
有两个ide可以做到,vscode和sloeber
但是这两个东西不反美根本没办法更新下载,尤其是vscode ...

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

出0入8汤圆

 楼主| 发表于 2020-6-27 19:21:11 | 显示全部楼层
dukelec 发表于 2020-6-27 18:44
好長,看不下去,你給總結一下吧。。。

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

看看我15楼说的对不?
(24869835)

出0入24汤圆

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

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

出0入8汤圆

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

有道理,以后对所有的库都这样做--复制到本地src目录。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-4-11 21:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表