小编引荐:SDK连接器指令文件转化成契合OAD的连接器指令文件咱们一起来学习学习吧。
怎么将规范的SDK连接器指令文件转化成契合OAD的连接器指令文件,下面以cc26xx_app_and_stack.icf为例。
分配元数据向量和应用程序起点内存。
咱们希望flash规模是应用程序和协议栈代码和数据。
替换:
// Code and RO Data
place in FLASH_ALL { readonly };
为:
// Code and RO Data
place in FLASH { readonly };
然后重界说flash从OAD_FLASH_START到FLASH_END。这将会占用30页。OAD_FLASH_START代表应用程序/协议栈开端的代码。
define region FLASH = mem:[from OAD_FLASH_START to FLASH_END];
然后界说OAD元数据宏
// OAD specific
define symbol OAD_HDR_SIZE = 16; // Size of metadata vector
define symbol OAD_HDR_START = FLASH_START;
define symbol OAD_HDR_END = OAD_HDR_START + OAD_HDR_SIZE – 1;
最终界说OAD_FLASH_START,元数据向量和中止表核算。
校准中止向量表
中止向量表是应用程序正确发动的要害,所以中止向量表映带在flash开端方位,可是由于元数据表,中止向量表需求移动。
首要界说如下宏:
define symbol INT_VEC_SIZE = 64;
define symbol INT_VEC_START = OAD_HDR_START + OAD_HDR_SIZE;
define symbol INT_VEC_END = INT_VEC_START + INT_VEC_SIZE – 1;
然后依据界说的符号来界说规模:
define region INT_VEC = mem:[from INT_VEC_START to INT_VEC_END];
最终,关于内存放置,需求增加以下内容,以便中止向量表部分正确地放置:
// Interrupt Vector Table
place at start of INT_VEC { readonly section .intvec };
keep { readonly section .intvec };
保存第31页(BIM+CCFGs)
由于工程不应该编译ccfg_app_ble.c文件,因而这儿不应该进行链接,移除下面这两行指令:
// CCFG
place at end of FLASH_LAST_PAGE { readonly section .ccfg };
keep { section .ccfg };
CCFGs应该由BIM编译链接。该过程保证第31页不被用户运用。
OAD镜像进行页校准。
Library OAD镜像文件编译之后总是占31页,所以能够不进行校准。OAD镜像生成东西也能够添补0xFF在鸿沟处。
协议栈巨细改动
一般,不应该改动协议栈巨细,可是假如需求能够依据OAD装备类型,在项目中对协议栈巨细进行更改。
只需APP+Stack能够更改,Library OAD是不行更改协议栈装备。使得进口点总是与页面最初处的相同地址。强制链接器进行页面对齐,只需PAGE_ALIGN=1在仓库项目中增加链接器界说。
在只进行协议栈OAD的装备情况下,协议栈OAD能够进行页面对齐,只需进口点相同,应用程序即可正常运转。
生成OAD镜像元数据向量
OAD_Image_Tool能够生成元数据向量并将其刺进到给定的镜像中,以发生OAD安排妥当镜像文件,OAD安排妥当镜像文件能够是hex文件或许一个包括target中止的元数据的bin文件。
OAD_Image_Tool是一个运用Python编写的东西,在Tools文件夹里边能够找到。
能够在IAR中的Post_build中运用,例如增加./oad_image_tool.exe -t offchip -o out.hex -m 0x0000 -i app in.hex。
该out.hex文件将是具有元数据的OAD安排妥当镜像,以奉告OAD Target它是片外OAD的应用程序镜像。
怎么生成OAD镜像文件
下图显现了怎么修改OAD镜像东西的IAR后期制作过程。能够经过右键单击项目->选项来访问此菜单。
$TOOLS_BLE_DIR$\oad\oad_image_tool.exe $PROJ_DIR$\FlashROM_OAD_Offchip\Exe$TARGET_BNAME$.hex -t offchip -i app –imgVer 0 -ob $PROJ_DIR$\FlashROM_OAD_Offchip\Exe$TARGET_BNAME$.bin -m 0x0000 –r 0x0000
这句指令编译后运转oad_image_tool.exe生成对应的bin和hex文件。