您尚未登录。

楼主 # 2024-04-01 14:35:35

tomas
会员
注册时间: 2024-03-26
已发帖子: 39
积分: 124

D2X怎么构建自己的工程?

通过scons --add-board可以从接近的模板中构建自己的模板工程。但下一步要怎么做,毕竟模板工程只是第一步。
1-从menuconfig中开通,关闭本地组件,在线组件,这个很方便。

2-如果需要加入用户自己的app或文件,应该是也要通过menuconfig而不会是在IDE里面强加,不然构建刷新的话,自己的app文件和设置也就没有了。是不是
需要自行编写相应的构建脚本文件?

3-关于GPIO,通过menuconfig,可以配置I2C,CAN这些外设的IO口,并在pinmux.c文件中有体现。但如果是通用IO口,比如就是个LED灯,同时也想在pinmux文件中做统一配置,这时候咋办?

还有个问题是关于eclipse开发的。
通过:scons --target=eclipse_sdk,可以生成完整的eclipse工程,在ide环境下,实测发现:
如果是导入工程并拷贝到本地workspace,这时候eclipse编译速度尚可。但如果是仅是导入而不拷贝,eclipse很容易假死。
另外,如果所构建的工程通过scons --target=eclipse_sdk重新构建后,已有的eclipse工程不会同步更新,因为老工程已经拷贝到本地workspace了。这时候咋办。
后来通过eclipse open projects from file system方式直接使用output文件夹下的eclipse工程,工程重构后,ide里面刷新后确实能自动更新,但还是存在编译速度非常慢的问题。
这一问题小结一下就是:ide只有把构建的工程导入且拷贝到其自己的workspace,编译速度会好一些,但工程重构后,老工程会得不到同步更新。

离线

#1 2024-04-10 20:44:48

shenyebuwu
会员
注册时间: 2024-04-10
已发帖子: 2
积分: 7

Re: D2X怎么构建自己的工程?

楼主用的是RTOS的SDK吗

离线

#2 2024-05-18 17:01:29

yuyu35
会员
注册时间: 2020-05-07
已发帖子: 3
积分: 3

Re: D2X怎么构建自己的工程?

留个记号,方便后期来查看!同研究如何新建一个工程、重新编写一个bootloader

离线

#3 2024-05-18 22:16:34

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 660
积分: 793
个人网站

Re: D2X怎么构建自己的工程?

_20240518_220850.png
_20240518_221142.png
_20240518_221200.png
_20240518_220928.png

测试了下,通过“Existing Code as Makefile Project”导入,并如上图配置构建。

一个完整的构建耗时10秒左右,可以接受。

离线

#4 2024-05-18 23:18:52

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 660
积分: 793
个人网站

Re: D2X怎么构建自己的工程?

不过上述方法有个大问题,因为很多编译相关的宏没有设置,导致工程里的很多符号没有被eclipse识别,这样写代码时很多东西不能自动补全,极不方便。

另一方面,按理来说,重复执行 scons --target=eclipse_sdk 后eclipse应该可以自动更新工程,并且应该不会的编译问题才对。

另一种工程管理方法:用VS Code配合bear(https://github.com/rizsotto/Bear)工具就可以检索复杂工程,用法如下:

* 先安装好bear工具,ArchLinux系统可以直接安装:sudo pacman -S bear
* 配合bear构建工程来生成clang的检索文件compile_commands.json:bear -- scons -j16
* 然后使用VS Code打开工程的文件夹即可,此时所有编译时用到的文件内的符号都能自动补全
* 工程因menuconfig更新后,需要重新执行第2部的bear构建来更新检索文件

最近编辑记录 海石生风 (2024-05-18 23:27:23)

离线

#5 2024-08-02 15:33:40

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 660
积分: 793
个人网站

Re: D2X怎么构建自己的工程?

更正一下,eclipse也可以使用上面所说的compile_commands.json文件,这其实是一个"Compilation Database"文件。配置方法如下图:
配置好了之后eclipse就能正确识别工程配置,并提供流畅的代码补全功能。

个人还是觉得eclispe比vs code好用点,目前vs code的git插件比eclipse的差太多了。
_20240802_153645.png

配置后展示
_20240802_153958.png_20240802_154026.png

最近编辑记录 海石生风 (2024-08-02 15:42:00)

离线

#7 2024-08-23 13:48:30

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 660
积分: 793
个人网站

Re: D2X怎么构建自己的工程?

又有新发现,scons本身就可以生成compile_commands.json文件。按下述diff修改SDK根目录上的SConstruct文件:

diff --git a/SConstruct b/SConstruct
index 9750ab30..a51b0846 100644
--- a/SConstruct
+++ b/SConstruct
@@ -102,6 +102,11 @@ env['ASCOM'] = env['ASPPCOM']
# signature database
env.SConsignFile(PRJ_OUT_DIR + ".sconsign.dblite")

+# compilation database
+env.Tool('compilation_db')
+compilation_db_file_name = PRJ_KERNEL + '_compile_commands.json'
+env.CompilationDatabase(compilation_db_file_name)
+
Export('RTT_ROOT')
Export('rtconfig')

- 编译boot时会生成baremetal_compile_commands.json
- 编译rt-thread时会生成rt-thread_compile_commands.json

那么搞两个项目Configuration分别叫boot和rt-thread分别各自使用上面的json db文件就可以灵活地对boot和rtos码字时进行完满的代码补全和阅读跳转了。
_20240823_135415.png
_20240823_135454.png
_20240823_135442.png

最近编辑记录 海石生风 (2024-08-23 14:02:29)

离线

#8 2024-08-26 15:00:11

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 660
积分: 793
个人网站

Re: D2X怎么构建自己的工程?

按上述改动后不知为何每次编译都更新compile_commands文件,导致编译时间变长好多。于是按下述修改,改为只有添加命令行参数时才更新:scons --cdb

# compilation database
AddOption('--cdb', dest='cdb', action='store_true', default=False, help='generate compilation database')
if GetOption('cdb'):
    env.Tool('compilation_db')
    compilation_db_file_name = PRJ_KERNEL + '_compile_commands.json'
    env.CompilationDatabase(compilation_db_file_name)

最近编辑记录 海石生风 (2024-08-26 15:01:23)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn