创建新工程及board
如果不需要创建新的板子,可以直接跳转创建新的工程
新board介绍
对于一块新的开发板,如果硬件外设相对旧的开发板都发生了变化,就需要定义一个新的board目录,用于体现这块新开发的特性;
新board创建
新board创建过程包括两个部分:
建立board目录;
修改相关konfig文件,以便在menuconfig选择及编译到。
建立board目录
完整的board目录包括以下文件:

其中:
bsp_int.c 板子初始化过程;
bsp_pinmux.c 板子pin的pinmux配置;
bsp_power.c 板子开机时的电源控制;
Kconfig 板子特有的menuconfig配置;
Sconscript 板子编译脚本;
一般提供的sdk各芯片都有做好的的board,可以基于这些board进行调整,以减少工作量;
以“eh-lb523_nor_new”为例创建board目录如下:

kconfig 修改
board 目录下Kconfig,用于配置board选项;

参考下图修改,新建board的宏:

配置包含新建的“eh-lb523_nor_new”目录下的Kconfig:

新工程介绍
新工程是指适配新的板子或软件上的特殊修改而创建单独的工程;
Solution2.0的工程分为3类:watch, mod,odometer等3类。
新工程创建
工程的组成
一般完整的工程包括:hcpu、lcpu、ota_manager、simulater、ftab、bootloader等工程;
工程都包括sct文件,msp文件,flash_map文件等文件。
一般只有hcpu/lcpu/ota_manager才会考虑修改sct文件,msp文件,flash_map文件,其他工程都是使用默认文件。
大致如下图:

工程的创建
创建工程的大致步骤如下:
创建工程文件夹
solution2.0的工程目录位于:solution\solution2_0\solution\examples。
目录examples根据工程类型区分3个目录:watch
、odometer
、mod
;
watch
:一般指智能手表类型的工程;
odometer
: 一般指码表类型的工程;
mod
:一般指模组类型的工程;
以智能手表eh-lb523_nor_new的工程创建为例,进入目录 solution\solution2_0\solution\examples\watch\project
创建新的目录“eh-lb523_nor_new”, 从其他目录复制hcpu,lcpu,ota_manager, simulater, __application_private__等目录,以及PrjCfg.ini文件;

修改Butterfli 的配置文件CompilerBurnUser.ini,以便从Butterfli 界面中找到新工程
配置文件CompilerBurnUser.ini位置,如下图:
配置内容包括:
步骤1:根据example类型,确定GROUP_TYPE;
GROUP_NUM 表示当前的GROUP的工程总数;如果我们增加了新的工程后导致总数增加的话,GROUP_NUM 需要加1;
eh-lb523_nor_new 的工程类型为watch,对应的GROUP_TYPE_0;
步骤2:增加COMPILE_SET;
找到TYPE_0开头的COMPILE_SET,如果没有空闲,可以手动添加;下图中在[TYPE_0_COMPILE_SET_8]添加配置信息,如下图;
小心
路径需要和前面创建的目录“eh-lb523_nor_new”对应
添加完成后效果如下图;
选中后,会发现面板上有很多选项是空的,如下图;
这些空白的选项需要通过配置工程目录下的PrjCfg.ini文件实现;
配置PrjCfg.ini文件
PrjCfg.ini文件包含了工程相关的很多选项,和工具Butterfli开发工具的界面对应的。
52x 工具和配置文件PrjCfg.ini对应关系,如下图:
56x 工具和配置文件PrjCfg.ini对应关系,如下图:
52x 用户代码只跑在大核,56x/55x/58x 用户代码则会涉及到大核和小核;
PrjCfg.ini大部分配置保持默认值,需要修改的配置项会详细说明;
下面逐个解释:
FLASHCFG_PATH
说明:flashmap的目录
配置如下FLASHCFG_PATH=solution\framework\__template__\config\hcpu\flash_map\flash_map_52x_nor(16MB).xlsx
大核工程的flashmap文件,用于分配存储资源,一般会根据板子进行修改;
flashmap文件会有专门章节讲解,这个步骤可以不修改;
FTABLE_PRJ
说明:ftab工程的目录;
52x/56x/58x平台对应的FTABL工程
参考路径:
52x :sdk\example\flash_table\sf32lb52x; 56x :sdk\example\flash_table\sf32lb56x; 58x :sdk\example\flash_table\sf32lb58x;
BTHOST_PRJ
说明:蓝牙host的目录
参考路径:
sdk\middleware\bluetooth_host\project\bluetooth_host;
BOOTLOADER_PRJ
说明:bootloader工程的目录
参考路径:
52x :sdk\example\boot_loader\project\butterflmicro\ram; 56x :sdk\example\boot_loader\project\sf32lb56x;
LGENERAL_PRJ
说明:general lcpu工程的目录,只有52x需要配置
参考路径:
52x :sdk\example\ble\lcpu_general\project\eh-6500;
HCPU_SCT
说明:大核 SCT文件的路径
参考路径:
52x :solution\framework\__template__\config\hcpu\linker_script\link_flash_52x.sct; 56x :solution\framework\__template__\config\hcpu\linker_script\link_flash_56x.sct; 58x :solution\framework\__template__\config\hcpu\linker_script\link_flash_58x.sct; 55x :solution\framework\__template__\config\hcpu\linker_script\link_flash_55x.sct;
备注
一般情况下,sct文件会根据实际需要进行调整,创建新的sct文件,路径同步调整即可;
LCPU_SCT
说明:小核 SCT文件的路径
参考路径:
56x :solution\framework\__template__\config\hcpu\linker_script\link_ldpu_56x_xip.sct; 58x :solution\framework\__template__\config\hcpu\linker_script\link_ldpu_58x_xip.sct;
OTAM_SCT
说明:小核 SCT文件的路径
参考路径:
solution\framework\__template__\config\ota_manager\linker_script\link_dfu.sct
HCPU_MSP
说明:大核 MSP文件的路径
参考路径:
52x :solution\framework\__template__\config\hcpu\msp_config\msp_config_52x.c; 56x :solution\framework\__template__\config\hcpu\msp_config\msp_config_56x.c; 58x :solution\framework\__template__\config\hcpu\msp_config\msp_config_58x.c; 55x :solution\framework\__template__\config\hcpu\msp_config\msp_config_55x.c;
PrjCfg.ini配置完成后,关闭Butterfli后,再打开,就能看到空白的选项都已填充完成;
注意:52x不需要配置LCPU的sct和msp文件;
flashmap制作
创建工程过程中需要选择合适的flashmap,以便编译的时候实现不同的资源放在不同的空间;
flashmap为xls文件,Butterfli编译的时候会根据flashmap.xlsx生成对应flashmap.c文件;
flashmap.xls包含FLASH_Config、FLASH_Map、FS_RES_PATH、MEM_Map_Customer分页;
分页FLASH_Config
包含了使用的flash和psram的配置;
分页FLASH_Map
包含了flash的资源分布情况;
flash 分区范围内3类,分别是BIN,RSV,FS;
BIN 分区
:单独的flash区,生成bin文件用于烧写到flash。文件必须对齐,对齐方式要和flash下载驱动保持一致;RSV 分区
:预留的flash分区,对齐方式和BIN一致;不需要烧写到flash;代码运行的时候会访问;FS 分区
: 以文件的形式存在于文件系统空间(例如:root)中。没有单独的flash分区;三种分区的分布如下图:
XIP
: XIP是指eXecute In Place,代码运行在存储器;XIP列用来标注XIP哪个分区的代码,以及运行的地址;如果运行在norflash ,运行地址就和flash相同,如下图:
如果运行在psram,运行地址为psram 地址0x60000000,如下图:
MACRO
:表格提供了给分区设置MACRO,便于代码中调用。例如:分区solution_code 的MACRO 是HCPU_FLASH_CODE, 生成的代码flash_map.c中一系列相关的宏。
其中:
HCPU_FLASH_CODE_START_ADDR 分区的开始地址
HCPU_FLASH_CODE_BURN_ADDR 分区的烧录地址
HCPU_FLASH_CODE_SIZE 分区的大小
HCPU_FLASH_CODE_END_ADDR 分区的结束地址
选择合适的board
一般新建工程都对应新建的board。
如何新建board,可以跳转创建新的board
menuconfig选择合适芯片;

menuconfig选择合适board;

至此,可以进行工程编译。
<本文结束>创建新工程