bin文件详解
bin 文件是 STM32 开发中最核心的裸机二进制可执行文件,也是最终烧录到芯片 Flash 里的文件格式。
bin文件对比hex文件更简单,没有地址信息,所以烧录bin文件需要指定Flash的地址。bin 文件的内容,就是按字节顺序,原封不动、一个不差地写到 STM32 的 Flash 里。
bin文件中包括的内容
- bin文件中保存编译后的机器码,也就是经过翻译后的c语言代码。
- 常量字符串以及所有常量数据。
- 全局变量初始值。
- 中断向量表:bin文件的起始内容,共64字节,按四字节对齐。
- 0-4字节:RAM起始地址:栈顶地址 = RAM起始地址 + 栈大小 +格式对齐字节(可能有)
红框所标注的就是bin文件的0-4字节,存储方式为大端存储,实际保存的就是0x2000 0410
其中RAM起始地址为0x2000 0000:
0x0000 0400是栈大小,在cubemx中配置的。
0x0000 0010是栈分配时为了对齐挪的位置。
- 5-8字节:复位中断(写入Flash地址+4)
0x0800 0149是复位中断地址,对应写入到Flash的地址
0x0800 0000对应Flash的起始地址(Flash是ROM的一种)。
0x0000 0149是Flash中复位中断的起始地址,也就是说写Flash时往后写0x149就会碰到复位中断
生成bin文件程序
配置keil生成bin文件:
准备以下命令:D:\keil\install\core\ARM\ARMCLANG\bin\fromelf(这一串改为自己keil的ARMcc或者ARMCLANG所在路径)--bin -o "$L@L.bin" "#L"
打开keil程序,点击魔法棒的c/c++选项,将命令填入到这个选项卡:
