打印
[信息]

【实战经验】IAP+APP 模式下不能启动 RTOS

[复制链接]
1812|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 14:27 编辑

IAP+APP 模式下不能启动 RTOS

问题:
该问题由某客户提出,发生在 STM32F407IGT6 器件上。据其工程师讲述:在其产品设计中,使用了 IAP+APP 模式的软件架构。IAP 为自行编写的 BOOT 程序,负责系统启动及更新 APP 程序,而 APP 则用于处理常规业务。系统启动后,首先运行 IAP 程序,由其完成系统初始化后跳转到 APP。两段程 序分别由两个独立的软件工程生成。其中,APP 程序是其于某款 RTOS 构建的。在加入 IAP+APP 模式 之前,做了单独的调试,即将其定位到 0x08000000 开始的地址空间直接启动,而不通过 IAP 跳转, 证实其可以运行。加入到 IAP+APP 架构中后,这段程序被重新定位到了 0x08004000 开始的地址空 间。然而这种情况下 APP 不能正常运行,跳飞掉了。通过打印跟踪,发现从 IAP 到 APP 的跳转可以 顺利完成,APP 前几行代码也可以执行,直到执行启动 RTOS 的函数后,不知去向。

调研:
检查 APP 软件工程,发现其软件工程是其于 ST 的标准外设驱动库构建的。于是,检查 其中的 system_stm32f4xx.c 文件,找到 systemInit()函数,如表(一)所示。

将其中的行 (1) 由
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET
改成:
SCB->VTOR = FLASH_BASE | 0x00004000
重新下载后,RTOS 可以正常运行。

结论:
没有重新定位中断向量表,导致 CPU 依使用 IAP 的中断向量表,进而 APP 的中断无法被正常的处 理。通常,RTOS 需要通过中断来进行任务调度,所以,致使其不能正常的运行。

处理:
修改软件,重新定位中断向量表到正确的位置。

建议:
Cortex-M3 和 Cortex-M4 的中断向量表是可以在最低 1GB 的地址空间内浮动的,且专门 设有一个偏移地址寄存器 VTOR,用于指示中断向量表的位置,如图(一):

该寄存器的各个位段的定义如表(二):

VTOR 的地址为:0xE000ED08,复位值为:0x00000000。所以,复位后 Cortex-M3 或 Cortex-M4 会到 地址 0x00000000 取 SP 的取值,而到地址 0x00000004 取 PC 的取值,来启动程序。一般来说,程 序启动后要重新装载 VTOR 的取值,使其指向自身的中断向量表,以保证后续程序能够正确的响应各 个中断请求。在 Cortex-M3 和 Cortex-M4 的系统中,对于中断向量表的存放位置的对齐边界有一定 的要求,可按如下公式计算:

其中,N 表示对齐字节数,Size 表示中断向量表的字节数。
Cortex-M0 没有 VTOR 寄存器,所以它的中断向量表必须放在 0x00000000 地址起始的寻址空间中, 而不能浮动。因此,在 Cortex-M0 的系统中,如要更新中断向量表,需将 RAM 映射到 0x00000000 地 址,然后将新的中断向量表复制到 0x00000000 地址起始的寻址空间当中。

对应的PDF:IAP+APP 模式下不能启动 RTOS
更多实战经验请看:【ST MCU实战经验汇总贴】
沙发
mmuuss586| | 2015-7-28 12:42 | 只看该作者

学习下;

使用特权

评论回复
板凳
wxl_user| | 2015-7-28 20:31 | 只看该作者
最近使用STM32F429IGT搞了bootloader,APP基于ucos-ii,修改中断向量表偏量地址,指定到用户区后,AAP正常运行。

使用特权

评论回复
地板
598330983| | 2015-7-28 22:36 | 只看该作者
修改软件,重新定位中断向量表到正确的位置:lol

使用特权

评论回复
5
734774645| | 2015-7-28 22:50 | 只看该作者
结论:
没有重新定位中断向量表,导致 CPU 依使用 IAP 的中断向量表,进而 APP 的中断无法被正常的处 理。通常,RTOS 需要通过中断来进行任务调度,所以,致使其不能正常的运行。

使用特权

评论回复
6
戈卫东| | 2015-7-28 23:25 | 只看该作者
系统搞得复杂了 出问题的机会也多了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17097

帖子

287

粉丝