通过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,编译速度会好一些,但工程重构后,老工程会得不到同步更新。
离线
楼主用的是RTOS的SDK吗
离线
留个记号,方便后期来查看!同研究如何新建一个工程、重新编写一个bootloader
离线
不过上述方法有个大问题,因为很多编译相关的宏没有设置,导致工程里的很多符号没有被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)
离线
又有新发现,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码字时进行完满的代码补全和阅读跳转了。
最近编辑记录 海石生风 (2024-08-23 14:02:29)
离线
按上述改动后不知为何每次编译都更新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)
离线