配置工程
开发者需要根据自己产品的特性配置相应的工程选项,包括NVDS,代码运行模式,存储器布局,After Build以及其他配置项。
配置custom_config.h
custom_config.h用于配置Application工程的参数。SDK_Folder\build\config\提供了一个custom_config.h的模板。各Application示例工程的custom_config.h位于其工程目录下的Src\config。
宏 | 描述 |
---|---|
CHIP_TYPE | 对芯片类型进行选择。 0:GR5515 1:GR5513 |
ENCRYPT_ENABLE | 使能固件加密的开关。默认设置为0。 0:不使能固件加密,支持移除加密相关代码,以节省RAM空间 1:使能固件加密 |
EXT_EXFLASH_ENABLE | 是否使用外部Flash。 0:不使用外部Flash 1:使用外部Flash |
SYS_FAULT_TRACE_ENABLE | 打印Callstack Trace Info的开关。打开该开关后,发生HardFault时,会将Callstack Trace Info通过串口打印出来。 0:关闭Trace打印 1:打开Trace打印 |
APP_DRIVER_USE_ENABLE | App Drivers模块的开关。 0:不使用App Drivers模块 1:使用App Drivers模块 |
APP_LOG_ENABLE | APP LOG模块的开关。 0:关闭Application中的Logs 1:打开Application中的Logs |
APP_LOG_STORE_ENABLE | APP LOG STORE模块的开关。 0:不使用APP LOG STORE模块 1:使用APP LOG STORE模块 |
APP_LOG_PORT | 设置APP LOG输出方式。 0:UART 1:J-Link RTT 2:ARM ITM |
SK_GUI_ENABLE | GR5515 Start Kit Board的GUI模块的开关。 0:不使用GUI模块 1:使用GUI模块 |
DEBUG_MONITOR | Debug Monitor模块的开关。 0:关闭Debug Monitor模块 1:打开Debug Monitor模块 |
DTM_TEST_ENABLE | DTM Test功能的开关。 0:关闭DTM Test功能 1:打开DTM Test功能 |
DFU_ENABLE | DFU功能的开关。 0:关闭DFU功能 1:打开DFU功能 |
FLASH_PROTECT_PRIORITY | Application在Flash擦写过程中,可阻止异常事件响应的优先级等级。 当FLASH_PROTECT_PRIORITY配置为N时,中断优先级小于或等于N的中断请求会被挂起,待Flash擦写完毕后,可响应挂起的中断请求。默认情况下,Flash擦写过程中不响应任何中断请求,开发者可以根据实际需要设置其值。 |
NVDS_START_ADDR | NVDS占用区域的起始地址,默认状态下该宏的值在custom_config.h中已经定义,但是定义的初始值只是针对申请的NVDS区域中只有一个sector,若用户需要申请多个sector,需根据申请的sector num自行计算起始地址(必须4K对齐)。 |
NVDS_NUM_SECTOR | NVDS使用的Flash Sector的数量。 |
CSTACK_HEAP_SIZE | Application所需要的Call Stack和Heap的大小,开发者可以根据Application的实际使用情况,调整其值,但不能少于6 KB。当前默认大小为16 KB。 各示例工程编译后其目录下的Keil_5\Objects\<project_name>.htm提供了可供参考的Maximum Stack Usage。 |
ENABLE_BACKTRACE_FEA | 栈回溯功能的开关。 0:关闭栈回溯功能 1:打开栈回溯功能 |
APP_CODE_LOAD_ADDR * | 程序存储空间的起始地址。该地址应在Flash地址范围内。 |
APP_CODE_RUN_ADDR * | 程序运行空间的起始地址。 如果该地址的值与APP_CODE_LOAD_ADDR相等,则Application会采用XIP模式运行。 如果该地址的值在RAM地址范围内,则Application会采用Mirror模式运行。 |
SYSTEM_CLOCK * | 系统时钟频率。其取值如下: 0:64 MHz 1:48 MHz 2:16 MHz(XO) 3:24 MHz 4:16 MHz 5:32 MHz(PLL) |
CFG_LF_ACCURARY_PPM | BLE低频睡眠时钟精度,其取值范围1 ~ 500,单位PPM。 |
CFG_LPCLK_INTERNAL_EN | 是否使用芯片内部的OSC时钟作为BLE低频睡眠时钟。若使用,则CFG_LF_ACCURARY_PPM强制设置为500。 0:不使用 1:使用 |
CFG_CRYSTAL_DELAY | 设置芯片在PMU中ENABLE RTC后的延时时间,以及修改RTC GM等参数后的延时时间。该值需要根据晶振实际测试所得的起振稳定时间配置,其取值范围为100 ~ 500,单位为ms,默认设置为100 ms。 |
BOOT_LONG_TIME * | 设置芯片启动时是否需要延迟1s再执行后半段启动代码。 0:不延迟 1:延迟1秒 |
BOOT_CHECK_IMAGE | 在XIP模式中,冷启动时是否要对image进行校验。 0:不进行校验 1:进行校验 |
VERSION * | Application Firmware版本号,长度2 Bytes,采用十六进制存储。 |
EXFLASH_WAKEUP_DELAY | 在热启动时,设置芯片在唤醒Flash和读取芯片ID间的延迟时间。其取值范围为0 ~ 10,单位为5 μs,即取值为0时不延迟,每增加1,延时时间增加5 μs。 |
CFG_MAX_BOND_DEVS | Application支持的最大可绑定设备数量。开发者根据实际需求设置该值,其值越大占用的RAM空间就越大。 |
CFG_MAX_PRFS | Application所能够包含的GATT Profile/Service的最大数量。开发者根据实际需求设置该值,其值越大占用的RAM空间就越大。 |
CFG_MAX_CONNECTIONS | Application支持的最大连接数量,最大值为10。开发者可以根据实际需要设置其值。 该值越大,BLE Stack Heaps需要占用的RAM空间就越大。BLE Stack Heaps具体大小由flash_scatter_config.h中的以下四个宏来定义,开发者不可修改这四个宏: ENV_HEAP_SIZE, ATT_DB_HEAP_SIZE, KE_MSG_HEAP_SIZE, NON_RET_HEAP_SIZE。 |
CFG_MAX_ADVS | Application支持的BLE传统广播和扩展广播总量的最大值。 |
CFG_MAX_ADV_DATA_LEN_SUPPORT | 设置是否支持传统广播数据长度为31字节。 0:不支持 1:支持 |
CFG_MAX_PER_ADVS | Application支持的最大BLE周期性广播数量。 说明: 配置的传统广播和扩展广播总量值(CFG_MAX_LEG_EXT_ADVS)与周期性广播数量值(CFG_MAX_PER_ADVS)的总和不能超过5。 |
CFG_MAX_SCAN | Application支持的最大BLE扫描数量,最大值为1。 |
CFG_MAX_SYNCS | 周期性广播同步数量,用于预留协议栈所需的RAM资源。开发者可根据实际使用的周期性广播同步数量设置该值,最大值为5。 |
CFG_MESH_SUPPORT | 是否支持MESH功能。 0:不支持 1:支持 |
CFG_LCP_SUPPORT | 是否支持LCP模块。 0:不支持 1:支持 |
APP_DRV_I2C/SPI/UART_DMA_ENABLE | 是否使能I2C/SPI/UART APP Driver模块的DMA模式。 0:不使能 1:使能 |
APP_DRV_I2C/SPI/UART_IT_ENABLE | 是否使能I2C/SPI/UART APP Driver模块的Interrupt模式。 0:不使能 1:使能 |
*:SDK toolchain中的ble_tools.exe会读取该宏的值,用于生成系统配置区(SCA)镜像文件。Bootloader程序会从系统配置区读取该值,作为启动参数。
custom_config.h的注释符合Keil的Configuration Wizard Annotations规范,因此开发者可以使用图形化的Keil Configuration Wizard来配置Application工程参数。强烈推荐开发者使用Wizard以避免出现非法参数值。
配置存储器布局
Keil用.sct文件定义链接器用到的存储段。GR551x SDK为Application开发者提供了一个示例flash_scatter_common.sct。该.sct文件使用的宏被定义在flash_scatter_config.h中。
在Keil中,__attribute__((section("name")))可用来将一个函数或变量放在单独的内存段中,其中name取决于开发者的选择。Scatter(.sct)文件可用来将被命名的段放在特定的位置。例如,将应用程序的ZI(零初始化)数据放在名为__attribute__((section(".bss.app")))段中。
开发者可按照以下步骤配置存储器布局:
- 点击Keil Toolbar的Options for Target按钮 ,打开Options for Target ‘GR551x_SK’对话框。选中Linker标签页。
- 在Scatter File栏,点击按钮...浏览选择SDK_Folder\toolchain\gr551x\source\arm下的flash_scatter_common.sct文件,或者将scatter文件(.sct)及其包含的.h文件复制到ble_app_example工程目录再选择。
说明:
flash_scatter_common.sct中的#! armcc -E -I ..\Src\config\ --cpu Cortex-M4指定了一个Include路径,其指向Application工程的custom_config.h所在的目录。如果该路径错误,则会产生Linker Error。
- 点击Edit...按钮,打开.sct文件,然后根据自己产品的存储器布局修改相应的代码。
- 点击OK按钮,保存设置。
配置After Build
Keil的After Build可以指定一个可执行程序或批处理文件在成功build之后运行。ble_app_template工程默认已添加after_build.bat文件在After Build中,开发者无需再给基于ble_app_template的ble_app_example工程手动配置After Build。SDK提供的after_build.bat的功能参考生成固件。
如果开发者新建一个工程,则需要按照以下步骤配置After Build:
- 点击Keil Toolbar的Options for Target按钮 ,打开Options for Target ‘GR551x_SK’对话框。选中User标签页。
- 在After Build/Rebuild展开的选项中勾选Run #1,然后点击 浏览选择SDK_Folder\build\scripts下的after_build.bat文件,或者先将SDK_Folder\build\scripts下的after_build.bat文件复制到ble_app_example工程目录再选择它。
说明:
after_build.bat中含有一些相对路径,比如SDK tools目录的路径。如果该批处理文件不再位于SDK_Folder\build\scripts中了,开发者应该修改这些相对路径,以避免After Build Error。
- 点击OK,保存设置。