首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
电源与功率管理
» 一个关于IAP+APP 模式下不能启动RTOS的话题
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
一个关于IAP+APP 模式下不能启动RTOS的话题
发短消息
加为好友
掘金小分队
当前离线
UID
1062334
帖子
193
精华
0
积分
99
阅读权限
20
在线时间
58 小时
注册时间
2016-7-19
最后登录
2019-6-28
注册会员
UID
1062334
性别
女
1
#
打印
字体大小:
t
T
掘金小分队
发表于 2017-1-17 14:35
|
只看该作者
一个关于IAP+APP 模式下不能启动RTOS的话题
软件工程
,
程序
,
空间
问题描述:
某客户
工程师讲述:他
使用
STM32F407IGT6 开发产品
,使用了IAP+APP 模式的软件架构。IAP 为自行编写的 BOOT程序,负责系统启动及更新 APP 程序,而 APP 则用于处理常规业务。系统启动后,首先运行 IAP程序,由其完成系统初始化后跳转APP。两段程序分别由两个独立的软件工程生成。其中,APP 程序是其于某款RTOS 构建的。在加入 IAP+APP 模式之前,分别做了单独的调试,即将其定位到0x08000000 开始的地址空间直接启动,而不通过 IAP 跳转,证实可以正常运行。加入到IAP+APP 架构中后,APP程序被重新定位到了 0x08004000 开始的地址空间。然而这种情况下
APP不能正常运行,跳飞掉了
。通过打印跟踪,发现从
IAP 到 APP的跳转可以顺利完成,APP前几行代码也可以执行,直到执行启动 RTOS 的函数后,不知去向。
问题调研:
检查
APP 软件工程,发现其软件工程是其于 ST 的标准外设驱动库构建的。于是,检查
其中的
system_stm32f4xx.c 文件,找到
systemInit()
函数。
将其中的
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET
改成:
SCB->VTOR = FLASH_BASE | 0x00004000
重新下载后,
RTOS 可以正常运行。
结论及处理:
用户没有重新定位中断向量表,导致
CPU 依使用 IAP 的中断向量表,进而APP 的中断无法被正常的处理。通常,RTOS 需要通过中断来进行任务调度,所以,致使其不能正常的运行。
当我们
修改软件,重新定位中断向量表到正确的位置后就OK。
话题延伸:
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
地址起始的寻址空间当中
本文转载微信公众号:融创芯城(一站式电子元器件,PCB,PCBA购买与服务,项目众包、方案共享平台)
http://www.digiic.com/home
收藏
分享
评分
融创芯城(一站式供应链)
平台网址:http://www.digiic.com
电子技术群:499391543
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议