创建新工程及board

如果不需要创建新的板子,可以直接跳转创建新的工程

新board介绍

对于一块新的开发板,如果硬件外设相对旧的开发板都发生了变化,就需要定义一个新的board目录,用于体现这块新开发的特性;


新board创建

新board创建过程包括两个部分:

  • 建立board目录;

  • 修改相关konfig文件,以便在menuconfig选择及编译到。

建立board目录

完整的board目录包括以下文件:

../../_images/board_0.png

其中:

bsp_int.c 板子初始化过程;

bsp_pinmux.c 板子pin的pinmux配置;

bsp_power.c 板子开机时的电源控制;

Kconfig 板子特有的menuconfig配置;

Sconscript 板子编译脚本;

一般提供的sdk各芯片都有做好的的board,可以基于这些board进行调整,以减少工作量;

以“eh-lb523_nor_new”为例创建board目录如下:

../../_images/board_1.png

kconfig 修改

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

../../_images/board_2.png

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

../../_images/board_3.png

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

../../_images/board_4.png

新工程介绍

新工程是指适配新的板子或软件上的特殊修改而创建单独的工程;

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文件,其他工程都是使用默认文件。

大致如下图:

../../_images/project_mind.png

工程的创建

创建工程的大致步骤如下:

  1. 创建工程文件夹

solution2.0的工程目录位于:solution\solution2_0\solution\examples。

目录examples根据工程类型区分3个目录:watchodometermod

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文件;

../../_images/project_folder.png
  1. 修改Butterfli 的配置文件CompilerBurnUser.ini,以便从Butterfli 界面中找到新工程

    配置文件CompilerBurnUser.ini位置,如下图:

    ../../_images/butterfli_configure_user.png

    配置内容包括:

    步骤1:根据example类型,确定GROUP_TYPE;

    ../../_images/butterfli_configure_user_1.png

    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]添加配置信息,如下图;

    ../../_images/butterfli_configure_user_2.png

    小心

    路径需要和前面创建的目录“eh-lb523_nor_new”对应

    添加完成后效果如下图;

    ../../_images/butterfli_configure_user_3.png

    选中后,会发现面板上有很多选项是空的,如下图;

    ../../_images/butterfli_configure_user_4.png

    这些空白的选项需要通过配置工程目录下的PrjCfg.ini文件实现;

  2. 配置PrjCfg.ini文件

    PrjCfg.ini文件包含了工程相关的很多选项,和工具Butterfli开发工具的界面对应的。

    52x 工具和配置文件PrjCfg.ini对应关系,如下图:

    ../../_images/project_PrjCfg.png

    56x 工具和配置文件PrjCfg.ini对应关系,如下图:

    ../../_images/project_PrjCfg_dualcore.png

    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后,再打开,就能看到空白的选项都已填充完成;

    ../../_images/butterfli_configure_user_5.png

    注意: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的配置;

    ../../_images/flashmap0.png
  • 分页FLASH_Map

    包含了flash的资源分布情况;

    flash 分区范围内3类,分别是BIN,RSV,FS;

    BIN 分区:单独的flash区,生成bin文件用于烧写到flash。文件必须对齐,对齐方式要和flash下载驱动保持一致;

    RSV 分区:预留的flash分区,对齐方式和BIN一致;不需要烧写到flash;代码运行的时候会访问;

    FS  分区: 以文件的形式存在于文件系统空间(例如:root)中。没有单独的flash分区;

    三种分区的分布如下图

    ../../_images/flashmap1.png

    XIP : XIP是指eXecute In Place,代码运行在存储器;XIP列用来标注XIP哪个分区的代码,以及运行的地址;

    如果运行在norflash ,运行地址就和flash相同,如下图:

    ../../_images/flashmap1_xip0.png

    如果运行在psram,运行地址为psram 地址0x60000000,如下图:

    ../../_images/flashmap1_xip1.png

    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 分区的结束地址

    ../../_images/flashmap1_macro.png

选择合适的board

一般新建工程都对应新建的board。

如何新建board,可以跳转创建新的board

menuconfig选择合适芯片;

../../_images/board_6.png

menuconfig选择合适board;

../../_images/board_5.png

至此,可以进行工程编译。


<本文结束>创建新工程