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 可以正常运行。
评论1
最新资源