S32K144_64_flash.ld文件中指定了固件中各个字段的空间分配情况,编译器依照此文件编译生成固件。 ps: S32K144_64_ram.ld文件指定代码在ram中运行时各字段的空间分配情况。
固件开始4个字节为栈顶地址,之后4个字节为reset中断向量入口地址,之后的中断向量入口地址如下图,参考arm cortex-m4文档DUI0553.pdf:
![](https://img-blog.csdnimg.cn/img_convert/ee4fd490ff0aeed8f692d7432e5116cf.png)
中段向量表的起始地址在S32K144_64_flash.ld文件中指定,如下:
![](https://img-blog.csdnimg.cn/img_convert/7a223d3436f3a9c2f8f27cf2745685f6.png)
固件写入flash之后,cpu默认中断向量表从0地址处开始,首先进入Reset中断,执行Reset_Handler中断服务函数。
Reset_Handler函数会加载sp指针,调用init_data_bss函数初始化ram中的全局变量,把中断向量表复制到ram中,设置VTOR寄存器的值为ram中的中断向量表地址(如果需要的话)和其他一些初始化内存的操作,之后跳转至main函数执行。
app固件需要根据app的存储地址在S32K144_64_flash.ld文件中指定各字段的位置:
![](https://img-blog.csdnimg.cn/img_convert/f2d4526d3be2a177b6f1a09a0ddef0fb.png)
Bootload欲跳转到app时,先定义函数指针,把函数指针赋值为app的Reset_Handler中断服务,然后运行该函数指针。