做单片机固件下载校验,过程中遇到的一些知识点整理;
1、Bootloader为什么要单独一个分区,不能放在APP头进行校验吗?不单独分区的bootloader是否可行?
个人想法,bootloader作为一个独立分区烧写更能保障安全性,但不独立对bootloader进行分区也是可行的,把boot放进app的头并在每次启动时对备份、加载固件进行判断,并不会影响实际使用,毕竟目前我接触的bootloader的作用主要是初始化、校验固件、跳转至APP,分区不分区只是起到一个烧写隔离的作用。
2、代码存储地址和运行地址
存储地址是代码编译的地址,是指令的存储位置,运行地址是代码编译完成后的实际地址,可以通过Map查看一些全局变量的偏移位置(这个是这些变量的实际地址),实际运行过程中,会将一些代码从Flash里加载到SRAM、DRAM中运行,这样做的好处一是速度更快,二是避免flash空间不够,如果程序是在flash里运行,则运行地址和加载地址是相同的。“如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。”
3、Dump文件
标准汇编文件 .s,中间汇编文件 .lst,完整汇编文件 .dump(完整的机器码)
4、在.S文件中用.space申请内存空间,才能让对应的片区在map文件中显示