S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR

S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR

bootloader和APP由另一位同事开发过程中,被导师叫回去写论文了。
由于项目不急,接手后未作任何改动,后面硬件工程师手工焊了几块电路版,需要刷上程序测试电路板。然后就遇到了奇怪的问题。
刷了四块电路板,只有一块的APP可以启动, 另外三块只有bootloader可以启动。
开始认为是电路板的问题,但是bootloader能正常运行又说不通。
后面又刷了几块板子,现象也是bootloader能启动,APP运行不起来。
MCU是S32K144w。
开发工具是S32DS,调试工具为J-Link。在APP main第一行增加了断点,显示没有运行到断点,就进入到DefaultISR了。
在这里插入图片描述
然后将APP的编译优化都去掉了,还是相同的现象。

之后在startup_S32K144.S的reset函数中增加了如下的断点:
在这里插入图片描述
在反汇编代码中跟踪进入main中后,发现其实已经进入CLOCK_SYS_Init函数里面了,这个函数的运行过程中触发了defaultisr。想到了网上说的时钟要反初始化一下。决定尝试一下。
但是发现没有CLOCK的反初始化函数:
在这里插入图片描述
就只能把外设中有的逐一调用了一下:
在这里插入图片描述
然后就发现APP能正常运行了。不知道什么原因。明天再用更多的板子测试一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
s32k144是一款微控制器,bootloader是在该微控制器上运行的一段特殊程序,用于加载和启动应用程序。s32k144bootloader指的是当bootloader执行完其任务后,将控制权交给应用程序的过程。 s32k144bootloader的实现方法有多种,具体取决于设计者的要求和需求。以下是其中一种常见的实现方法: 1. 在bootloader中,定义一个函数,该函数的功能是到应用程序的入口点。这个入口点地址需要在编译应用程序预先确定并保存在某个特定位置,供bootloader使用。 2. 应用程序在编译,将入口点地址写入一个特定的内存位置,例如特殊的区域或一个预留的变量中。 3. 在bootloader中,通过读取这个特定的内存位置,获取应用程序的入口点地址。 4. 当bootloader的任务完成,即完成了一些必要的操作,例如固件更新或配置加载等,bootloader将调用这个特定的函数,到应用程序的入口点。 5. 到应用程序后,控制权交给应用程序,应用程序将开始执行。 这种方法的好处是灵活性和可靠性。通过将入口点地址保存在特定的内存位置,bootloader可以在不同的应用程序之间,从而实现多个应用程序共存的功能。另外,此方法也确保了bootloader和应用程序之间的隔离,增强了系统的安全性和可靠性。 总之,s32k144bootloader是将控制权从bootloader移到应用程序的过程,它可以通过在编译应用程序预先确定和保存入口点地址的方法来实现。这种方法在实现多个应用程序共存并增加系统的安全性和可靠性方面具有优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值