搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2019-9-2 17:28:13 | 显示全部楼层 |阅读模式
如题求助,使用KEAZ128 MCU通过UART方式实现bootloader功能,根据NXP官网提供的文档,修改了icf文件配置,但是跳转应用层程序提示HardFault,如附件贴图。所以请教一下,除了修改icf配置文件,还需要修改什么配置吗?目前排除了FLASH写,UART数据传输错误,应该就是应用层程序跳转接口哪设置的不对。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-9-2 21:52:00 来自手机 | 显示全部楼层
中断向量表需要重定向吗?

出0入0汤圆

 楼主| 发表于 2019-9-3 09:17:13 | 显示全部楼层
zhaoyuanxian 发表于 2019-9-2 21:52
中断向量表需要重定向吗?

需要的,我的理解修改icf文件就是中断向量重定向,bootloader不熟悉属于新手上路,理解不对请指正哈

出0入8汤圆

发表于 2019-9-3 09:29:57 | 显示全部楼层
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. }
复制代码

出0入0汤圆

 楼主| 发表于 2019-9-3 10:31:10 | 显示全部楼层
本帖最后由 Lu.Shi 于 2019-9-3 10:37 编辑
security 发表于 2019-9-3 09:29
我贴一段跳转的代码,给你参考一下吧。


多谢回复,我理解的“FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR”就是应用层工程的中断起始地址,不知道理解的对否?其次,我觉得问题应该是跳转应用程序的地址应该还有什么配置的,跳转的程序是NXP官方文档提供的,估计问题可能不再这,我试了试你的方法,结果发现,执行完跳转依然是bootloader工程代码,并没有跳转到应用层程序。

出0入8汤圆

发表于 2019-9-3 10:37:35 | 显示全部楼层
Lu.Shi 发表于 2019-9-3 10:31
多谢回复,我理解的“FIRMWARE_VECTOR_TABLE_ABSOLUTE_ADDR”就是应用层工程的中断起始地址,不知道理解 ...

是的,应用程序的中断向量表的地址。

出0入0汤圆

 楼主| 发表于 2019-9-3 14:49:13 | 显示全部楼层
问题已解决,工程配置的时候把icf加载的不对,加载成其他工程的icf文件。上面的icf配置,跳转调用完全正确。PS:找到原因之后发现原来错的如此简单

出0入4汤圆

发表于 2019-9-24 09:13:15 | 显示全部楼层
Lu.Shi 发表于 2019-9-3 14:49
问题已解决,工程配置的时候把icf加载的不对,加载成其他工程的icf文件。上面的icf配置,跳转调用完全正确 ...

如此简单以致于别人很难发现

出0入0汤圆

发表于 2019-10-17 00:13:27 | 显示全部楼层
请问你是怎么抓到hardfault的?一般情况下bootloader和app不是两个工程吗?你在bootloader中debug,当最后调转到app之后,怎么能知道在app中发生了hardfault呢?

出0入0汤圆

 楼主| 发表于 2019-11-3 16:46:17 | 显示全部楼层
防滑销钉 发表于 2019-10-17 00:13
请问你是怎么抓到hardfault的?一般情况下bootloader和app不是两个工程吗?你在bootloader中debug,当最后 ...

我是在一个工程里面,有一个外部输入,当收到标志信号就跳转到bootloader的部分,准备接收数据写flash

出0入0汤圆

发表于 2019-11-7 19:10:56 | 显示全部楼层
Lu.Shi 发表于 2019-11-3 16:46
我是在一个工程里面,有一个外部输入,当收到标志信号就跳转到bootloader的部分,准备接收数据写flash ...

能简单讲一下,怎么把bootloader 和app置于同一个工程的吗?

出0入0汤圆

 楼主| 发表于 2019-11-14 11:17:46 | 显示全部楼层
防滑销钉 发表于 2019-11-7 19:10
能简单讲一下,怎么把bootloader 和app置于同一个工程的吗?

可能理解的有误差,bootloader和app是两个工程,但是我记得当时debug bootloader工程的时候程序刷写完之后,运行一会儿就hardfault了,但是能确定是跳转到app之后hardfault的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 03:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表