一、背景
最近利用mdk 提供的命令行工具编译构建 nordic bootloader 工程,编译、连接都正常执行,连接后输出boot.axf
文件。最后要将boot.axf
文件转换成 hex 文件时,发现生成的是包括三个hex文件的目录。
二、环境
- mcu :nrf52833
- 协议栈:S140
- sdk:sdk17.02
- 命令行工具:fromelf.exe make
三、问题分析
分散加载文件排查
在网上查了一轮,比较多的说法是分散加载文件(.sct
文件)配置出错,我仔细检测了一下,sct文件定义的起始地址,地址范围都正常的。
fromelf.exe 命令行参数 --i32combined
顺着网上文章的思路,查看了fromelf.exe
的命令行参数用法,似乎找到了问题所在,这里提到当有多个load regions
的 时候,会输出一个目录:
回归工程文件,查看产生 multi load regions 的原因
回头认真查看了一下目录里面的三个文件,发现三个都是hex 文件,但是地址是独立分离的。在工程内搜索了一下0x10001014
和 0x10001018
, 发现一个共同的特性:代码里使用编译指令__attribute__
将特定参数保存到这两个地址里。这里跟上面的提到的multi load regions
对应上了。
四、问题解决
fromelf.exe 基于axf 文件生成hex文件
fromelf.exe --i32combined -o target.hex target.axf
fromelf.exe 基于axf 文件生成bin文件
fromelf.exe --bincombined -o target.bin target.axf