keil mdk生成文件.hex和.bin文件分析
如何生成.bin文件
将cmd目录切换到name.axf下,输入fromelf --bin --output name.bin name.axf
,就可以生成bin文件。
或者在mdk中设置,如下图
hex文件
hex文件包含如下格式开始符号+字节数+地址+类型+数据+校验
其中类型有
0x01 | 数据 |
---|---|
0x01 | 文件结束 |
0x02 | 扩展的段地址 |
0x03 | 开始段地址 |
0x04 | 扩展线性地址 |
0x05 | 开始线性地址 |
分析上图中的hex文件,0x08000000是开始地址,之后在该地址上加,
0x08000000是STM32flash的起始地址。注意cortex-m3是小端模式存储示意如下:
地址 | 数据 |
---|---|
0x08000000 | 0x20000660 |
0x08000004 | 0x080001B1 |
0x20000660正是复位后SP的指针,堆栈是向低地址增长的。
0x080001B1正是复位后 Reset_Handler的地址。
以上hex文件中的数据按地址存储到stm32的flash中。
bin文件
bin文件内容是直接存储到flash中的。用一般的编辑器打开后是乱码。用winhex软件可以查看。这与hex中的数据是相同的,只是没有那些标记,是纯粹的写入flash中的数据。
这些数字代表什么意思呢?
这些都是机器码,是arm-v7指令的编码。查看工程的.axf文件可以得到反汇编代码,得到的与上述存储的数据是一致的。fromelf -c name.axf
即可生成反汇编代码。