OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5358|回复: 40

大神救命!!!带ucos系统的APP升级问题!!

[复制链接]

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
发表于 2017-1-10 11:47:50 | 显示全部楼层 |阅读模式
5金钱
最近在做stm32f107的升级。APP是带ucos系统的,IAP没带。正常给板子通电开启,是先运行iap,直接跳转app运行代码;当app得到上位机指令跳转带iap等待app的新的.bin文件升级。 问题在于:从iap升级app时,最后跳转到app,app的任务运行不了。第一个任务进不去,因为是在第一个任务里开其他任务,所以这就导致任务运行不了。可能是osstart失败吧(我猜的) !!!但是只要给板子重新断电上电,升级的APP可以正常运行。这就说明iap升级app没问题,中断向量表也没问题。我查了网上很多资料,写的都是裸机的升级,带ucos的升级比较麻烦。有大神能解决吗,万分感谢。 因为想做到,升级后不断电就可以使用

最佳答案

查看完整内容[请看2#楼]

app直接复位就可以从IAP启动了,不需要再跳转吧。 我一般app是这么用的 __set_FAULTMASK(1); //disable all interrupt NVIC_SystemReset(); //system reset
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2013-8-18
在线时间
40 小时
发表于 2017-1-10 11:47:51 | 显示全部楼层
app直接复位就可以从IAP启动了,不需要再跳转吧。
我一般app是这么用的
__set_FAULTMASK(1);    //disable all interrupt
NVIC_SystemReset();    //system reset
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2017-1-10 11:50:09 | 显示全部楼层
帮顶 ~~
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 11:51:42 | 显示全部楼层
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2017-1-10 12:46:51 | 显示全部楼层
[mw_shl_code=applescript,true]//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用户代码区第二个字为程序开始地址(复位地址)               
//                MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
               
                SET_PSP(*(vu32*)appxaddr);                //重新设置进程PSP堆栈地址
                __set_CONTROL(0);                             //设置为MSP
                SET_MSP(*(vu32*)appxaddr);                //重新设置进程MSP堆栈地址
                jump2app();                                                                        //跳转到APP.
        }
}                 
[/mw_shl_code]
跳转前要处理一下
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 14:09:39 | 显示全部楼层
Akatsuki_lim 发表于 2017-1-10 12:46
[mw_shl_code=applescript,true]//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u3 ...

先谢谢了。
我的iap和app跳转程序部分都写了
__set_CONTROL(0);
MSR_MSP(*(vu32*)FLASH_IAP_ADDR);       
这两句话。问题如下:
1、SET_PSP(*(vu32*)appxaddr); 和SET_MSP(*(vu32*)appxaddr); 具体里面汇编是怎么写的
2、MSR_MSP(*(vu32*)appxaddr); 这行为什么注掉了??
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 14:35:27 | 显示全部楼层
Akatsuki_lim 发表于 2017-1-10 12:46
[mw_shl_code=applescript,true]//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u3 ...

试过了还是不行,还是要重新上电才行。iap是裸机,app是带ucos系统的
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
发表于 2017-1-10 14:43:49 | 显示全部楼层
app中需要设置FLASH_BASE地址偏移,有没有设置?
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 14:47:22 | 显示全部楼层
dutchlight 发表于 2017-1-10 14:43
app中需要设置FLASH_BASE地址偏移,有没有设置?

先谢谢了。当然设置了,互相跳转是可以的
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
发表于 2017-1-10 15:03:10 | 显示全部楼层
viewbot 发表于 2017-1-10 14:47
先谢谢了。当然设置了,互相跳转是可以的

把你跳转部分的代码贴出来看看,
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:07:08 | 显示全部楼层
dutchlight 发表于 2017-1-10 15:03
把你跳转部分的代码贴出来看看,

app和iap百分百都可以互相跳转的,iap是裸机程序APP是ucos系统,问题是iap跳app,第一个任务进不去(有几率可以正常运行),但是重新上电可以正常运行升级后的app
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:09:46 | 显示全部楼层
iap跳转部分:
void iap_load_app(u32 appxaddr)
{
  RCC_DeInit();
  NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x0);
//        __ASM("CPSID I");
        Delay1(100);
//        SCB->VTOR |= 0x0;
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        {
        //        NVIC_SystemReset();
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用户代码区第二个字为程序开始地址(复位地址)       

                MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)               
//                SET_PSP(*(vu32*)appxaddr);      //重新设置进程PSP堆栈地址
//    __set_CONTROL(0);               //设置为MSP
//    SET_MSP(*(vu32*)appxaddr);      //重新设置进程MSP堆栈地址       
                jump2app();                                                                        //跳转到APP.
        }
}

app跳转部分:
static void PCComm_Jump_IAP(uint8_t *pdata, uint8_t len)
{
                int *p;
                p = (int *)0x200037D8;
                *p = 0x1234;
//    NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x0);
                RCC_DeInit();
                __ASM("CPSID I");
          NVIC_SystemReset();
          if(((*(vu32*)FLASH_IAP_ADDR)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
          {
               
                 jumptoiap=(iapfun)*(vu32*)(FLASH_IAP_ADDR+4);                //用户代码区第二个字为程序开始地址(复位地址)                                                                               
                        __set_CONTROL(0);
                 MSR_MSP(*(vu32*)FLASH_IAP_ADDR);                                        //初始化IAP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
                 jumptoiap();                                                                        //跳转到IAP.               
          }
       
}
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:40:39 | 显示全部楼层
是iap跳转app后第一个任务可以进,其他任务不运行
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 15:49:43 | 显示全部楼层
跑系统和不跑系统升级有区别吗?跳转的都是APP程序要执行的中断向量偏移地址。。可以APP1跑的时候就把要升级的程序写入FLASH,并置上更新标识。然后软起,检测标识,清标识,跳转到APP2运行。。
shop60994719.taobao.com
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:51:55 | 显示全部楼层
密耳 发表于 2017-1-10 15:49
跑系统和不跑系统升级有区别吗?跳转的都是APP程序要执行的中断向量偏移地址。。可以APP1跑的时候就把要升 ...

你说软复位吗
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:52:24 | 显示全部楼层
密耳 发表于 2017-1-10 15:49
跑系统和不跑系统升级有区别吗?跳转的都是APP程序要执行的中断向量偏移地址。。可以APP1跑的时候就把要升 ...

还有必须有区别
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 15:52:31 | 显示全部楼层

shop60994719.taobao.com
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 15:56:21 | 显示全部楼层

早就试过了 麻烦你在仔细看一下一楼,是app的第一个任务进了,其他任务没运行
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
发表于 2017-1-10 16:04:19 | 显示全部楼层
viewbot 发表于 2017-1-10 15:56
早就试过了 麻烦你在仔细看一下一楼,是app的第一个任务进了,其他任务没运行

跳转到APP之前把打开的所有中断一个个关掉,还有你 NVIC_SystemReset();之后还可以执行后面的代码吗?我没试过。
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:05:03 | 显示全部楼层
viewbot 发表于 2017-1-10 15:56
早就试过了 麻烦你在仔细看一下一楼,是app的第一个任务进了,其他任务没运行

如果你保证IAP跳转到升级的APP执行没问题,而是UCos  start任务无法调度其他任务,你可以用调试器仿真,看每次程序卡在哪块,最可能的是调度失败(删除任务失败);多半是时钟的问题。
shop60994719.taobao.com
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:06:53 | 显示全部楼层
dutchlight 发表于 2017-1-10 16:04
跳转到APP之前把打开的所有中断一个个关掉,还有你 NVIC_SystemReset();之后还可以执行后面的代码吗?我 ...

那行是之前试的,被注释了,没用
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:11:23 | 显示全部楼层
密耳 发表于 2017-1-10 16:05
如果你保证IAP跳转到升级的APP执行没问题,而是UCos  start任务无法调度其他任务,你可以用调试器仿真, ...

我觉得也是,大部分是跳转到app ,并且执行了第一个任务就死了,小几率是连第一个任务都没进。我也怀疑是时钟问题,之前是百分之六七十跳转后会正常运行,现在是跳转后百分之百不运行了。。。
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2016-4-10
在线时间
18 小时
发表于 2017-1-10 16:13:02 | 显示全部楼层
你看看你APP程序中最开始有没有设置SCB->VTOR = FLASH_BASE|0X10000;指定中断向量表位置。后面这个值看你的APP放的位置。
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:14:39 | 显示全部楼层
viewbot 发表于 2017-1-10 16:11
我觉得也是,大部分是跳转到app ,并且执行了第一个任务就死了,小几率是连第一个任务都没进。我也怀疑是 ...

还有一个简单的办法,你把你要升级的app2直接刷到STM32里,IAP里跳转到APP2的中断入口,你看程序执行不?这样你就可以分析是你的APP2有问题,还是其他地方的问题。
shop60994719.taobao.com
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:18:12 | 显示全部楼层
密耳 发表于 2017-1-10 16:14
还有一个简单的办法,你把你要升级的app2直接刷到STM32里,IAP里跳转到APP2的中断入口,你看程序执行不? ...

我用一样的app.bin来升级也这样。@Akatsuki_lim他说的在点子上
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:20:31 | 显示全部楼层
密耳 发表于 2017-1-10 16:14
还有一个简单的办法,你把你要升级的app2直接刷到STM32里,IAP里跳转到APP2的中断入口,你看程序执行不? ...

刚才说错了,你说的时钟那个在点子上,不过不知道咋整
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:31:25 | 显示全部楼层
我试了下原子的程序,我是直接IAP+APP都用调试器下载进STM32的,APP改变中断地址。程序运行没问题............
1.png
2.png
shop60994719.taobao.com
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:38:50 | 显示全部楼层
密耳 发表于 2017-1-10 16:31
我试了下原子的程序,我是直接IAP+APP都用调试器下载进STM32的,APP改变中断地址。程序运行没问题......... ...

我的是公司的项目程序,这种简简单单的例程,肯定没这么多问题
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:43:51 | 显示全部楼层
你把你IAP程序和你app main()和IROM1设置贴出来看看。。还简单的例程,再简单调度不都一样..........
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:43:58 | 显示全部楼层
你把你IAP程序和你app main()和IROM1设置贴出来看看。。还简单的例程,再简单调度不都一样..........
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2017-1-10 16:44:01 | 显示全部楼层
你把你IAP程序和你app main()和IROM1设置贴出来看看。。还简单的例程,再简单调度不都一样..........
shop60994719.taobao.com
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2017-1-10 16:46:12 | 显示全部楼层
本帖最后由 Akatsuki_lim 于 2017-1-10 16:48 编辑
viewbot 发表于 2017-1-10 14:09
先谢谢了。
我的iap和app跳转程序部分都写了
__set_CONTROL(0);

1.[mw_shl_code=applescript,true]__ASM void SET_MSP(u32 addr)
{
        MSR MSP, R0
        BX LR
}

__ASM void SET_PSP(u32 addr)
{
        MSR PSP, R0
        BX LR
}[/mw_shl_code]
2.具体我也不太懂,有次无意间看到一个博文,他没有加这个语句,我就跟着这样做。。arm里面的东西我也不是很懂
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 16:52:07 | 显示全部楼层
Akatsuki_lim 发表于 2017-1-10 16:46
1.[mw_shl_code=applescript,true]__ASM void SET_MSP(u32 addr)
{
        MSR MSP, R0

跟这个关系不大,注释那就句和你这两句意思一样,都是重新设堆栈指针,最终都是设置MSp
回复

使用道具 举报

5

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2015-9-7
在线时间
82 小时
发表于 2017-1-10 17:00:51 | 显示全部楼层
我也做过带操作系统 的app升级,但是你这个既然能正常运行第一个系统任务 那应该不是你IAP程序的问题
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 17:47:48 | 显示全部楼层
chonchie 发表于 2017-1-10 16:44
app直接复位就可以从IAP启动了,不需要再跳转吧。
我一般app是这么用的
__set_FAULTMASK(1);    //disabl ...

谢谢,这样就可以了。之前看过很多资料,所以一直想着相互直接通过函数跳转,之前也试过软复位,但是整个流程没整明白,所以没成功。直接软复位是可以实现升级,但是作为实际项目来说,我的板子间接控制主机的开关机,软复位的话就把主机断电了。这个我再想想怎么搞吧,谢谢了
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 17:48:43 | 显示全部楼层
淡淡的鼬殇 发表于 2017-1-10 17:00
我也做过带操作系统 的app升级,但是你这个既然能正常运行第一个系统任务 那应该不是你IAP程序的问题

恩,ucos系统时钟哪没整明白吧。最后用软复位了
回复

使用道具 举报

2

主题

22

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-1-10
在线时间
5 小时
 楼主| 发表于 2017-1-10 17:51:20 | 显示全部楼层
怎么把悬赏的积分给出去啊
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-9-8
在线时间
11 小时
发表于 2017-1-24 10:56:36 | 显示全部楼层
楼主,我遇到的问题和你差不多,跳到APP程序可以跑起来但时钟感觉不对,打印信息都是乱码,你问题解决了吗
回复

使用道具 举报

38

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1176
金钱
1176
注册时间
2015-11-9
在线时间
249 小时
发表于 2017-6-20 12:52:25 | 显示全部楼层
viewbot 发表于 2017-1-10 17:51
怎么把悬赏的积分给出去啊

楼主,解决了没,我也是一样问题,IAP程序不带UCOS,APP如果裸机,可以正常跳转,APP如果跑了UCOSIII系统,跳转后APP就不运行了
回复

使用道具 举报

15

主题

109

帖子

0

精华

高级会员

Rank: 4

积分
826
金钱
826
注册时间
2016-6-28
在线时间
160 小时
发表于 2017-11-24 11:37:40 | 显示全部楼层
shibinjie 发表于 2017-6-20 12:52
楼主,解决了没,我也是一样问题,IAP程序不带UCOS,APP如果裸机,可以正常跳转,APP如果跑了UCOSIII系统 ...

你好,你的问题IAP升级带UCOS的app后不运行解决了吗?
回复

使用道具 举报

33

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2014-1-24
在线时间
102 小时
发表于 2018-1-25 13:11:47 | 显示全部楼层
shibinjie 发表于 2017-6-20 12:52
楼主,解决了没,我也是一样问题,IAP程序不带UCOS,APP如果裸机,可以正常跳转,APP如果跑了UCOSIII系统 ...

我也碰到一样的问题,不带系统就OK,带系统就挂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 09:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表