KEAZ128 UART bootloader跳转应用层程序异常

2020-02-11 08:49发布

如题求助,使用KEAZ128 MCU通过UART方式实现bootloader功能,根据NXP官网提供的文档,修改了icf文件配置,但是跳转应用层程序提示HardFault,如附件贴图。所以请教一下,除了修改icf配置文件,还需要修改什么配置吗?目前排除了FLASH写,UART数据传输错误,应该就是应用层程序跳转接口哪设置的不对。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
zhaoyuanxian
1楼-- · 2020-02-11 10:54
 精彩回答 2  元偷偷看……
Lu.Shi
2楼-- · 2020-02-11 13:17
zhaoyuanxian 发表于 2019-9-2 21:52
中断向量表需要重定向吗?

需要的,我的理解修改icf文件就是中断向量重定向,bootloader不熟悉属于新手上路,理解不对请指正哈
security
3楼-- · 2020-02-11 15:13
Lu.Shi 发表于 2019-9-3 09:17
需要的,我的理解修改icf文件就是中断向量重定向,bootloader不熟悉属于新手上路,理解不对请指正哈 ...


我贴一段跳转的代码,给你参考一下吧。
  1. // 引导固件的接口的类型定义
  2. typedef void (*pfn_load_firmware_t)(void);

  3. void BOOT_LoadFirmware(uint32_t firmwareEntry)
  4. {
  5.         static pfn_load_firmware_t s_loadFirmware;
  6.         static uint32_t s_stackPointer;
  7.        
  8.         AlwaysDisableInterrupt();

  9.         SCB->VTOR = (uint32_t)FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR;

  10.         s_stackPointer = FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR[0];
  11.         __set_MSP(s_stackPointer);
  12.         __set_PSP(s_stackPointer);

  13.         s_loadFirmware = (pfn_load_firmware_t)firmwareEntry;

  14.         s_loadFirmware();
  15.        
  16.         while (1)
  17.         {
  18.                 ;
  19.         }
  20. }
复制代码
Lu.Shi
4楼-- · 2020-02-11 19:15
本帖最后由 Lu.Shi 于 2019-9-3 10:37 编辑
security 发表于 2019-9-3 09:29
我贴一段跳转的代码,给你参考一下吧。


多谢回复,我理解的“FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR”就是应用层工程的中断起始地址,不知道理解的对否?其次,我觉得问题应该是跳转应用程序的地址应该还有什么配置的,跳转的程序是NXP官方文档提供的,估计问题可能不再这,我试了试你的方法,结果发现,执行完跳转依然是bootloader工程代码,并没有跳转到应用层程序。
security
5楼-- · 2020-02-11 23:17
Lu.Shi 发表于 2019-9-3 10:31
多谢回复,我理解的“FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR”就是应用层工程的中断起始地址,不知道理解 ...

是的,应用程序的中断向量表的地址。
Lu.Shi
6楼-- · 2020-02-12 02:07
 精彩回答 2  元偷偷看……

一周热门 更多>