(六)零基础开发小安派-Eyes-S1【入门篇】——工程文件架构

[复制链接]
查看4451 | 回复23 | 2023-9-8 13:41:41 | 显示全部楼层 |阅读模式

本帖最后由 Ai-Thinker小泽 于 2023-9-8 13:41 编辑

本帖最后由 Ai-Thinker小泽 于 2023-9-8 13:38 编辑

本帖最后由 Ai-Thinker小泽 于 2023-9-8 13:36 编辑

本帖最后由 Ai-Thinker小泽 于 2023-9-8 13:30 编辑

本帖最后由 Ai-Thinker小泽 于 2023-9-8 13:30 编辑

零基础开发小安派-Eyes-S1【入门篇】——工程文件架构

新建的工程包含多个文件和文件夹,作为初学者第一次接触,下面浅聊一下我对工程文件的了解,若有不对的地方请大家多多指正。

一、build文件夹

该文件夹是编译后生成的bin文件存储的地方,如本工程文件的文件名作为Helloworld,编译后的bin文件也是以工程名+芯片命名。

屏幕截图2023-08-31152707.png

生成的bin文件存储在build/build_out下,可以看见有多个类似的文件,这里我们烧录取bin文件,这里可以看到在hellowworld工程编译生成的bin文件命名为 helloworld_bl616.bin,因为bl616和bl618的芯片其实在软件上的区分很小,他们通用同一个SDK,在硬件上的区分在于616的IO口数量不如618,由于使用同一套SDK,所以bl616和618的固件是可以通用的,这里无需过多计较区别。

屏幕截图2023-08-31152759.png

注意,这里的bin文件在博流的烧录工具上并不是合成的bin文件,这里对应的bin文件是图中的firmware目录下的bin文件,还需要其他的如boot2等文件,那么问题来了,使用Single Download Options烧录的合成bin文件在哪里,其实是在SDK中,具体的路径为:

aithinker_Ai-M6X_SDK/tools/bflb_tools/bouffalo_flash_cube/chips/bl616/img_create/whole_flash_data.bin

如果需要使用Windows下的烧录工具烧录bin文件,选择这个路径下的whole_flash_data.bin即可。

屏幕截图2023-08-31152840.png

二、CMakeLists.txt

CMake是一个跨平台、开源的构建系统,它可以帮助我们管理好工程里的软件架构。CMakeLists.txt文件相当于执行的列表,它可以调用其他的.h头文件和.so/.a库文件,生成Makefile,将.cpp/.c/.cc文件编译成可执行文件或新的库文件。我们从简单的helloworld工程学习,先打开CMakeLists.txt查看里面的语句。

屏幕截图2023-09-08105242.png

BouffaloSDK中封装了以下函数接口,基本满足常用场景使用。

Function Description
sdk_generate_library 生成库,库名如果函数没有形参则使用当前库所在目录名
sdk_library_add_sources 为库添加源文件
sdk_library_add_sources_ifdef 为库添加源文件(满足 if 条件)
sdk_add_include_directories 添加头文件路径
sdk_add_include_directories_ifdef 添加头文件路径(满足 if 条件)
sdk_add_compile_definitions 添加宏定义,不要带 -D
sdk_add_compile_definitions_ifdef 添加宏定义(满足 if 条件)
sdk_add_compile_options 添加编译选项
sdk_add_compile_options_ifdef 添加编译选项(满足 if 条件)
sdk_add_link_options 添加链接选项
sdk_add_link_options_ifdef 添加链接选项(满足 if 条件)
sdk_add_link_libraries 添加静态库
sdk_add_link_libraries_ifdef 添加静态库(满足 if 条件)
sdk_add_subdirectory_ifdef 编译子目录下的 cmakelist(满足 if 条件)
sdk_add_static_library 添加外部静态库
sdk_set_linker_script 设置链接脚本
sdk_set_main_file 设置 main 函数所在文件
project 工程编译
target_source(app PRIVATE xxx) 添加源文件到 app 库中,当用户需要自己添加一些源文件又不想创建 cmakelist 单独编译成库,可以使用该项

三、flash_prog_cfg.ini

BouffaloSDK 采用新的 flash tool(bouffalo_flash_cube),并且烧录依赖 flash prog cfg.ini 文件。我们的烧录命令make flash就是依赖这个文件执行的。它也有自己的语法。 屏幕截图2023-09-08105427.png

正常使用只需要创建一个 KEY,例如 [FW],并且填写 filedir 和 address 就可以使用了。

其中 filedir 的填写方式有以下几种:

  • bin 文件全路径 + bin 文件名称
  • bin 文件相对路径 + bin 文件名称
  • bin 文件名称添加 _$(CHIPNAME) 后缀可以自动识别成不同芯片(仅在 bin 文件名称前缀不同的时候使用)
  • bin 文件名称添加 * 通配符,可以自动补全bin 文件名称(仅在 bin 文件名称前缀不同的时候使用)

1.模组作为MCU(不使用无线功能)

只需要和helloworld工程一样修改filedir的文件名即可。

[cfg]
 # 0: no erase, 1:programmed section erase, 2: chip erase
 erase = 1
 # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
 skip_mode = 0x0, 0x0
 # 0: not use isp mode, #1: isp mode
 boot2_isp_mode = 0

[FW]
 filedir = ./build/build_out/xxx*_$(CHIPNAME).bin
 address = 0x0000
-  cfg 表示烧录时的一些配置,正常不需要改动
-  FW 要烧录的应用固件,必须使用 FW 名称。filedir 表示应用固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。 _$(CHIPNAME).bin 用于自动区分不同芯片。 xxx 表示应用固件名称,与 CMakeLists.txt 中 project(xxx) 中名称一致。* 表示正则匹配,可用可不用。address 必须使用 0 地址

2.模组作为IOT(开启无线功能)

[cfg]
 # 0: no erase, 1:programmed section erase, 2: chip erase
 erase = 1
 # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
 skip_mode = 0x0, 0x0
 # 0: not use isp mode, #1: isp mode
 boot2_isp_mode = 0

 [boot2]
 filedir = ./build/build_out/boot2_*.bin
 address = 0x000000

 [partition]
 filedir = ./build/build_out/partition*.bin
 address = 0xE000

 [FW]
 filedir = ./build/build_out/xxx*_$(CHIPNAME).bin
 address = 0x10000

 [mfg]
 filedir = ./build/build_out/mfg*.bin
 address = 0x210000
-  cfg 表示烧录时的一些配置,正常不需要改动
-  FW 要烧录的应用固件,必须使用 FW 名称。

filedir 表示应用固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。 _$(CHIPNAME).bin 用于区分不同芯片。 xxx 表示应用固件名称,与 CMakeLists.txt 中 project(xxx) 中名称一致。

address 由 partition_xxx.toml 指定

-  boot2 要烧录的 boot2 固件,必须使用 boot2 名称。

filedir 表示 boot2 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。 自动从 bsp/board/board_name/config 目录拷贝。

address 必须使用 0 地址

-  partition 要烧录的 partition 固件,必须使用 partition 名称。

filedir 表示 partition 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。 自动从 bsp/board/board_name/config 目录 partition_xxx.toml 转换成 bin 文件并拷贝。

address 由 partition_xxx.toml 指定

-  mfg 要烧录的 mfg 固件,必须使用 mfg 名称。 mfg 可选,可以不烧录

filedir 表示 mfg 固件所在相对路径,正常来说是编译完后放在 build/build_out 目录。 自动从 bsp/board/board_name/config 目录拷贝。

address 由 partition_xxx.toml 指定

(备注:如果使用了 partition,address 可以使用 @partition 代替绝对地址,@partition 将会自动从 partition_xxx.toml 找到对应的地址)

3.多个运行固化烧录

禁止使用通配符 * 以及 _$(CHIPNAME) 前缀,因为 bin 文件名称前缀相同。

[cfg]
 # 0: no erase, 1:programmed section erase, 2: chip erase
 erase = 1
 # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
 skip_mode = 0x0, 0x0
 # 0: not use isp mode, #1: isp mode
 boot2_isp_mode = 0

 [FW1]
 filedir = ./build/build_out/xxx0.bin
 address = 0x00000

 [FW2]
 filedir = ./build/build_out/xxx1.bin
 address = 0x10000

 [FW3]
 filedir = ./build/build_out/xxx2.bin
 address = 0x20000

四、main.c

main.c,主程序运行的文件。 屏幕截图2023-09-08111051.png

五、Makefile

编译的文件,其指定了一系列以赖关系和依赖规则。指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,可以实现自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

屏幕截图2023-09-08111302.png

目前来说只需要修改第二行BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../aithinker_Ai-M6X_SDK的编译路径设置即可。

六、proj.conf

前面在CMakeLists.txt中提到的组件的使用,当我们需要使用各种组件或开启一些配置功能时,需要进入这个文件中添加。

屏幕截图2023-09-08111752.png

举例:需要添加SD卡,或者LVGL。需要在proj.conf中

set(CONFIG_FATFS            1)
set(CONFIG_LVGL             1)

七、README.md

README相当于一个说明书,由工程的管理者进行编写,包括该工程一些简介,使用方法,注意事项等等。

md文件后缀的格式并不是什么高大上的文件,只是一种编辑的语法,可以使用记事本打开,也可以在VS中安装Markdown Preview插件。

屏幕截图2023-09-08112119.png

这样查看README时可以右键点击 MPE:打开侧边预览,可以方便我们查看README。 屏幕截图2023-09-08112749.png

本帖被以下淘专辑推荐:

回复

使用道具 举报

ai_mcu | 2023-9-8 13:47:09 | 显示全部楼层
搞起来搞起来,下班就搞起来
明天总会更好
回复 支持 反对

使用道具 举报

CHENQIGUANG1998 | 2023-9-8 13:48:41 | 显示全部楼层
打卡学习了
回复 支持 反对

使用道具 举报

爱笑 | 2023-9-8 14:05:09 | 显示全部楼层
打卡!
用心做好保姆工作
回复

使用道具 举报

开发板 | 2023-9-8 15:00:41 | 显示全部楼层
打卡!
回复

使用道具 举报

496199544 | 2023-9-8 15:33:21 来自手机 | 显示全部楼层
打卡
回复

使用道具 举报

翁vjk | 2023-9-8 19:31:08 | 显示全部楼层
打卡
回复

使用道具 举报

jkernet | 2023-9-8 19:35:24 来自手机 | 显示全部楼层
学习打卡
回复

使用道具 举报

王乐乐 | 2023-9-9 10:34:15 | 显示全部楼层
打卡
回复

使用道具 举报

ckdsx.cn | 2023-9-12 12:05:30 | 显示全部楼层
插眼,有空实践
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则