stm32用IAP升级带操作系统的程序,下载成功,但运行失败

[复制链接]
ningzb 发表于 2013-1-23 11:10 | 显示全部楼层
int main(void)
{
  /* Setup STM32 system (clock, PLL and Flash configuration) */
        SystemInit();
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
       

  /* Add your application code here
     */
        os_sys_init (task1);  
       

  /* Infinite loop */
  while (1)
  {
  }
}


__task void task1 (void)
{
        while (1)
        {
        os_dly_wait (20);
        }
}
yyql008 发表于 2013-1-23 11:21 | 显示全部楼层
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
还是放在main第一句里面稳当.要是SystemInit();里面开启定时中断,并进入中断了,你咋搞,弄不好就出问题(跳到IAP的定时中断,然后影响应用程序的ram,可以出现任何问题).
ningzb 发表于 2013-1-23 11:50 | 显示全部楼层
目前的问题是可以运行一段时间,然后就会到汇编的一个死循环里面,文件startup_stm32f10x_hd.s的第324行,
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
                B       .;<-程序跳转到此处
d:\11.bmp
ningzb 发表于 2013-1-23 11:50 | 显示全部楼层
目前的问题是可以运行一段时间,然后就会到汇编的一个死循环里面,文件startup_stm32f10x_hd.s的第324行,
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler
                B       .;<-程序跳转到此处
d:\11.bmp
jason_chdsh 发表于 2013-2-1 22:36 | 显示全部楼层
受教了,学习中
ly971021598 发表于 2013-5-16 17:18 | 显示全部楼层
楼主的问题,我今天也遇到了,刚才也解决了,解决方法如下:
我用的是STM32F103VE的芯片,操作系统用的是ucos-II的系统,楼主的跳转程序没问题,
一般是这样
int main()
{

  CPU_INT08U os_err;           /* 禁止所有中断 */               
        CPU_IntDis();         /* ucosII 初始化 */
        OSInit();             /* 硬件平台初始化 */       
//  NVIC_SetVectorTable(0x8010000, 0x0004);       
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
cjhk 发表于 2013-5-16 18:52 | 显示全部楼层
这个问题以前没有遇到过   楼主   帮你顶一个   看看别人的意见   顶一个   
cjhk 发表于 2013-5-16 18:53 | 显示全部楼层
没帮上忙   对不住   楼主   飘过
bbc960 发表于 2013-5-22 19:10 | 显示全部楼层
RTX问题,如需解决可以找我,呵呵,PSP与MSP使用错误。QQ:1059171043
timetim 发表于 2013-6-6 17:42 | 显示全部楼层
啊,我也是同样的问题,带RL-RTX就不行
用IAP只能升级不带RTX的程序,
求解决啊
jiayou0054 发表于 2013-6-6 23:58 | 显示全部楼层
用IAP加载的应用程序,至少需要设置两个地方:
1)在程序中,显示执行NVIC_SetVectorTable(),注明一个偏移地址,应该是256字节对齐的吧;
2)在编译器选项中,应指定ROM的起始地址为Flash首地址+1)中的偏移地址。
weifanti 发表于 2013-7-5 11:23 | 显示全部楼层
我遇到的是 LPC2132 IC  用IAP 烧录应用程序后  开机后出现死机, 但是如果是用NXP提供的ICP工具烧录的话 又可以正常工作。 用IAP烧录后,出现这种问题的概率该20% , 更换MCU后正常工作,不知道是什么原因照成的?
outstanding 发表于 2013-7-5 14:20 | 显示全部楼层

NVIC_SetVectorTable(Flash_Base,  App_Offset);  是的,这个函数才是关键,
andyjian 发表于 2013-12-7 15:56 | 显示全部楼层
应该是RTX的问题吧,看来高手还没有来呀
pattywu 发表于 2013-12-7 16:13 | 显示全部楼层
IAP要注意的地方:
1、MSP的值,是4字节对齐的;(调试时,可以看一下,是否)
2、跳转的地址,低位必须为1,表示为Thumb模式指令,而非ARM模式指令;
3、中转后的中断向量,应该指向APP的中断向量的位置(256字节对齐,低8位全是0);
4、IAP中用到的全局变量、中断等,在APP中是否有相应处理。
wangzhihai1986 发表于 2014-9-17 11:27 | 显示全部楼层
如果IAP程序中使用了操作系统,在进行跳转前一定要切换到MSP(主堆栈)。__set_CONTROL(0);
wangji666666 发表于 2014-10-10 14:11 | 显示全部楼层
楼主问题解决了吗?我也遇到了同样的问题,不行的话看来要换操作系统了
shentq 发表于 2015-9-8 01:32 | 显示全部楼层
你的那个iap运行操作系统的问题解决了吗?我也遇到了同样的问题。知道肯定是中断向量表的问题。但是不知道怎么修改。试了下网友回复的方法,也解决不了。可以跟我讲讲吗?联系方式qq995207301
wangzhihai1986 发表于 2015-9-8 08:31 | 显示全部楼层
skymlj2000 发表于 2010-1-18 21:01
#define ApplicationAddress 0x08008000   //应用程序区

/* Jump to user application */

__set_MSP(*(__IO uint32_t*) ApplicationAddress);
在它后面加段__set_CONTROL(0);试下。
baicaijin 发表于 2015-9-29 16:48 | 显示全部楼层
yyql008 发表于 2013-1-22 18:05
NVIC_SetVectorTable(Flash_Base,  App_Offset);重新定义中断向量表.
注意,这个一定要放在main函数的第 ...

你说的非常对,我的同样问题,按你说的,APP的 main 函数第一句就是设置中断向量表后,带RTX的APP起来了,运转正常,非常感谢,感谢!!!!!:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部