登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
23
1
1
首页
小安派&M61零基础开发教程(官方)
›
(六)零基础开发小安派-Eyes-S1【入门篇】——工程文件 ...
1
2
3
/ 3 页
下一页
返回列表
(六)零基础开发小安派-Eyes-S1【入门篇】——工程文件架构
[ 复制链接 ]
发布帖子
Ai-Thinker小泽
论坛元老
38
主题
537
回帖
6810
积分
论坛元老
论坛元老, 积分 6810, 距离下一级还需 9993189 积分
论坛元老, 积分 6810, 距离下一级还需 9993189 积分
积分
6810
私信
23人留言
楼主
小安派&M61零基础开发教程(官方)
8349
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文件也是以工程名+芯片命名。  生成的bin文件存储在build/build_out下,可以看见有多个类似的文件,这里我们烧录取bin文件,这里可以看到在hellowworld工程编译生成的bin文件命名为 helloworld_bl616.bin,因为bl616和bl618的芯片其实在软件上的区分很小,他们通用同一个SDK,在硬件上的区分在于616的IO口数量不如618,由于使用同一套SDK,所以bl616和618的固件是可以通用的,这里无需过多计较区别。  注意,这里的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即可。  ## 二、CMakeLists.txt CMake是一个跨平台、开源的构建系统,它可以帮助我们管理好工程里的软件架构。CMakeLists.txt文件相当于执行的列表,它可以调用其他的.h头文件和.so/.a库文件,生成Makefile,将.cpp/.c/.cc文件编译成可执行文件或新的库文件。我们从简单的helloworld工程学习,先打开CMakeLists.txt查看里面的语句。  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就是依赖这个文件执行的。它也有自己的语法。  正常使用只需要创建一个 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,主程序运行的文件。  ## 五、Makefile 编译的文件,其指定了一系列以赖关系和依赖规则。指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,可以实现自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。  目前来说只需要修改第二行BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../aithinker_Ai-M6X_SDK的编译路径设置即可。 ## 六、proj.conf 前面在CMakeLists.txt中提到的组件的使用,当我们需要使用各种组件或开启一些配置功能时,需要进入这个文件中添加。  举例:需要添加SD卡,或者LVGL。需要在proj.conf中 ``` set(CONFIG_FATFS 1) set(CONFIG_LVGL 1) ``` ## 七、README.md README相当于一个说明书,由工程的管理者进行编写,包括该工程一些简介,使用方法,注意事项等等。 md文件后缀的格式并不是什么高大上的文件,只是一种编辑的语法,可以使用记事本打开,也可以在VS中安装Markdown Preview插件。  这样查看README时可以右键点击 MPE:打开侧边预览,可以方便我们查看README。 
点赞
1
收藏
1
淘帖
2
────
1
人觉得很赞
────
本帖被以下淘专辑推荐:
·
小安派S1&M61教程合集
|
主题: 19, 订阅: 5
·
小安派&M61零基础教程
|
主题: 19, 订阅: 5
回复
使用道具
举报
23 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
ai_mcu
回复
使用道具
举报
2023-9-8 13:47:09
搞起来搞起来,下班就搞起来
回复
评论
使用道具
举报
明天总会更好
板凳
CHENQIGUANG1998
回复
使用道具
举报
2023-9-8 13:48:41
打卡学习了
回复
评论
使用道具
举报
地板
爱笑
回复
使用道具
举报
2023-9-8 14:05:09
打卡!
回复
评论
使用道具
举报
用心做好保姆工作
5
#
开发板
回复
使用道具
举报
2023-9-8 15:00:41
打卡!
回复
评论
使用道具
举报
6
#
496199544
来自手机
回复
使用道具
举报
2023-9-8 15:33:21
打卡
回复
评论
使用道具
举报
7
#
翁vjk
回复
使用道具
举报
2023-9-8 19:31:08
打卡
回复
评论
使用道具
举报
8
#
jkernet
来自手机
回复
使用道具
举报
2023-9-8 19:35:24
学习打卡
回复
评论
使用道具
举报
9
#
王乐乐
回复
使用道具
举报
2023-9-9 10:34:15
打卡
回复
评论
使用道具
举报
10
#
ckdsx.cn
回复
使用道具
举报
2023-9-12 12:05:30
插眼,有空实践
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
下一页 »
1
2
3
/ 3 页
下一页
今日推荐
【BW20-12F开发板评测】6、Zephyr初步
【安信可BW20-12F-Kit测评】“高级” 点灯
【电子DIY作品】默语智家-AI智能机器狗(立创地文星开发板+安信
【BW20-12F开发板评测】5、NTP时钟
【安信可BW20-12F-Kit测评】环境搭建
【安信可BW20-12F-Kit测评】环境搭建
【BW20-12F 】开发板 WiFi LED 状态指示项目开发教程
求助,Ai-WB2-05W烧录模式一直发送0xff
【BW20-12F开发板评测】4、虚拟文件系统
Ai-WB2-05W烧录模式下是不是没有开启SDIO
热帖排行
Ai-WB2的AT指令发送https请求,如何设置header
热力图贡献
UWB 跟随小车 BU04 可以用esp32s3来控制汽车吗?
【BW20-12F开发板评测】6、Zephyr初步
AI-M62-13U 启动蓝牙从机失败,请帮忙查看是什么情况,多谢
【安信可BW20-12F-Kit测评】“高级” 点灯
【电子DIY作品】默语智家-AI智能机器狗(立创地文星开发板+安信
【BW20-12F开发板评测】5、NTP时钟
统计信息
会员数: 30224 个
话题数: 44437 篇
首页
分类
我的