求助:IAP里的APP使用的RTT,跳转后出错。[已解决]

发布于 2013-11-21 18:48:47

RT,写了个bootloader,stm32f407,使用串口,现在测试阶段,用mdk烧进boot和app,app开始地址是0x08020000,
app如果用裸奔程序,跳转后正常,如果app换成带rtt的,跳转后会死在这个函数里:rt_system_scheduler_start();

rtt尝试在main里增加

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000);

或者修改system_stm32f4xx.c的

#define VECT_TAB_OFFSET  0x20000

都不行。。

跳转前我已经把boot里的开启过的中断关掉了。

有没有人遇到过类似情况呢?

查看更多

关注者
0
被浏览
6.4k
12 个回答
aozima
aozima 2013-11-21
拒绝白嫖,拒绝键盘侠!
可以参考一下同类型的贴子: IAP hardfault
wangjt1988
wangjt1988 2013-11-21
不一样的,他的boot用了rtt,我的boot没用rtt,我的boot是裸奔的,而且跳转没问题,是执行到
/* start scheduler */
rt_system_scheduler_start();
这里 ,这个函数没有返回。
aozima
aozima 2013-11-21
拒绝白嫖,拒绝键盘侠!
这个函数本身就不应该返回。
单步一下系统跑到哪了就明白了,多数是进了不该进的中断,或是过早地进入了某些还没启用的中断。
比如在开启中断前,已有很多中断处于pend状态。
wangjt1988
wangjt1988 2013-11-21
跳转前关闭中断,然后把外设相关寄存器清零
	USART1->SR = 0;
USART1->CR1 = 0;
TIM6->SR = 0;
TIM6->CR1 = 0;
TIM6->CR2 = 0;
TIM6->DIER = 0;

还是不行,boot里就开了tim6和usart1
prife
prife 2013-11-21
rt_system_scheduler_start();
这个函数就会启动RTT中的调度器调度线程执行,所以永远不会返回,这是正常现象啊。

楼主说出错,出错信息或症状是什么呢?
wangjt1988
wangjt1988 2013-11-21
恩,刚接触os,不返回是对的,现象是该闪动的LED没有闪,后来debug看,是指针飞了,现在已经解决,是需要修改misc。h里面的中断表地址。。。。。
aozima
aozima 2013-11-21
拒绝白嫖,拒绝键盘侠!
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main

                ;/* Set up vector table offset register and sp. */
                LDR     R0, =__Vectors
                LDR     R1, =0xE000ED08 ;/* SCB->VTOR */
                STR     R0, [R1]
                LDR     R0, [R0]
                MOV     SP, R0

                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

Magic Code

grissiom
grissiom 2013-11-21
LDR    R1, =0xE000ED08

这个写法不错~

tprobot
tprobot 2014-07-09
同样问题。通过修改misc.h中的NVIC_VectTab_FLASH 地址。问题得到解决~
aozima
aozima 2014-07-09
拒绝白嫖,拒绝键盘侠!
建议的作法是修改 NVIC_SetVectorTable函数的 offset 参数,以便于外来库的升级。
ralfak
ralfak 2015-09-11
建议的作法是修改 NVIC_SetVectorTable函数的 offset 参数,以便于外来库的升级。


原来藏在这个地方,光改了system_stm32f4xx.c的OFFSET还不起作用

然而这儿藏着这个东西干嘛呢

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览