首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换;
BootLoader程序
- 关中断
- 初始化时钟;
- 初始化CAN
- 初始化flash读写;
- 开中断,开CAN中断;
- 计时判断CAN是否收到bootloader开始报文;
- 时间到后没收到跳转到原用户程序启动向量;
- 收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE);
其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码
extern char __SEG_START_RAM_CODE[] ;
extern char __SEG_END_RAM_CODE[];
extern char __SEG_SIZE_RAM_CODE ;