工具/软件:TI C/C++编译器
您好!
我正在为 CC2640R2开发示例应用、该应用旨在通过 BLE 连接进行无线升级。
该设计具有以下约束条件。
- 图像标题必须从图像的开头开始。 这必须进行页面对齐
- 条目段必须紧跟在图像标头之后、并且必须被安装到闪存中的已知地址
- 最后填充的地址必须通过链接器命令文件导出到变量。 然后、此变量用于填充发送 OTA 的.c 文件中的头文件结构
- 应从较低地址到高地址顺序填充闪存、同时最大限度地减少放置中的间隙数量。
我的问题是如何可靠地知道图像中最后填充的地址。 理想情况下、我要拆分段以实现最佳放置、并使用组来确保按顺序放置所需的段。 但是、在某些具有.snvSecors 的图像中、flashEndAddr 并不是真正放置在.cinit 中。 但是.cinit 不能拆分。
以下是链接器文件的相关代码段:
MEMORY
{//
编辑器注释:
*可以通过在
* Properties->ARM Linker->Advanced Options->Command File Preprocessing 中定义* ICALL_STACK0_START 或 ICALL_RAM0_START 来更改闪存和 SRAM 长度。
//
闪存(RX):origin = flash_start,length =(flash_end - flash_start)+ 1)
entry (RX):origin = entry_start,length = entry_size
flash_IMG_HDR (RX):origin = OAD_HDR_start,length = OAD_HDR_size
SRAM (rwx):origin = RAM_START,ram_length = RAM_start
………………………
一些器件经过了编辑、以提高示例
部分
{
GROUP > FLASH_IMG_HDR
{的可读性/简易性
.image_header align page_size
}
组>条
目{
.resetVecs
.intvecs
EntrySection load_start (prgEntryAddr)
}
组>> FLASH
{
.text
.const
.constdata
rodata
.EMB_TEXT
.pinit
}
.cinit :> FLASH load_end (flashEndAddr)
.snvSecors :>闪存(高电平)
}