完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用qboot建立bootloader的时候,发现跳转到app后app死机。 查阅很多资料均说是中断没有关干净导致,但是我检查了一遍也没发现。 于是我新建了两个最基础的rtthread工程,一个加上跳转函数作为bootloader,一个在main.c中添加中断向量表偏移函数作为app,但是就这样的组合,跳转还是出现了hardfault,调试可发现其跳转至app,在hw_board_init中,clk_init前开启总中断,执行后就会触发systick中断,随后就hardfault了,但是这个systick中断在bootloader中跳转前已经关闭,跳转函数还是使用的qboot的跳转函数。 我也查阅了很多资料,我怀疑是pendsv搞的鬼,但是我调试时在pendsv处打断点,也没发现进pendsv中断,所以就很困惑。还望有经验的大神指导指导。 rtthread为4.03版本。 bootloader 跳转函数 RT_WEAK void qbt_jump_to_app(const char*part) /** Function ota_app_vtor_reconfig |
|
相关推荐
3个回答
|
|
确认之后来结题了
先说结论 跳转函数在系统时钟主频较低时 跳转函数的执行设定是有点问题的 关闭总中断后最好是优先关闭systick,中间不要夹杂其它代码了。 问题诱因是因为主频配成了8M,导致关总中断后到关闭systick中间的指令时间大于systick触发时间,后续排查时直接看ICSR内存大小端看错了,还以为产生的是MemManager异常,其实就是systick中断挂起了。 就是这样,所以qboot的跳转函数针对指令时间问题可以优化一下,关总中断后优先关闭systick即可 RT_WEAK void qbt_jump_to_app(void) { typedef void (*app_func_t)(void); u32 app_addr = QBOOT_APP_ADDR; u32 stk_addr = *((__IO uint32_t *)app_addr); app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4))); if ((((u32)app_func & 0xff000000) != 0x08000000) || ((stk_addr & 0x2ff00000) != 0x20000000)) { LOG_E("No legitimate application."); return; } rt_kprintf("Jump to application running ... n"); rt_thread_mdelay(200); __disable_irq(); SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; HAL_DeInit(); for(int i=0; i<128; i++) { HAL_NVIC_DisableIRQ(i); HAL_NVIC_ClearPendingIRQ(i); } HAL_RCC_DeInit(); __set_CONTROL(0); __set_MSP(stk_addr); app_func();//Jump to application running LOG_E("Qboot jump to application fail."); } |
|
|
|
赞!你的改动可以向仓库发个PR。
主频配成了8M 这样boot是否太慢了?不过boot里面配了PLL后,APP里面再配PLL时顺序非常重要,不然容易死锁,所以boot中deinit了。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
732 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1297 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
3563 浏览 0 评论
1687 浏览 0 评论
【英飞凌PSoC 6 RTT开发板试用】串口测试标准输入输出重定向
1213 浏览 0 评论
59785 浏览 21 评论
野火 ISO STM32资料合集(程序、原理图、项目初高级篇)
18973 浏览 49 评论
287634 浏览 79 评论
13598 浏览 52 评论
16447 浏览 55 评论
53967 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-22 04:17 , Processed in 0.595194 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191