OpenEdv-开源电子网

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

IAP升级带ucos的APP无法成功运行

[复制链接]

11

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-7-6
在线时间
20 小时
发表于 2018-8-29 20:54:51 | 显示全部楼层 |阅读模式
5金钱
STM32F407,用bootloader通过USB程序更新APP,当app程序中没有ucos系统时,每次都成功更新app程序且跳转。
当APP中有ucos时,更新完成后app程序无法顺利运行。

已经试过的方法如下:1,在bootloader跳转到app前,在bootloader中关闭外设和USB时钟。
2.在APP的OSStart()函数前重新偏移向量表。SCB->VTOR=FLASH_BASE|0x10000;

APP程序中有ucos系统,SD卡,FATFS文件描述等。(单独是可以运行的)

有人出现过类似的问题吗?求解决



T0)OV)A6}U2L3%V53LD@L)G.png


最佳答案

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

我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了 //2018/8/11 解决ucos3无法跳转的问题 void jump_to_app(uint32_t app_address) { typedef void (*_func)(void); __disable_irq(); /* MCU peripherals re-initial. */ { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStruc ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2018-8-29 20:54:52 | 显示全部楼层
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8/11 解决ucos3无法跳转的问题
void jump_to_app(uint32_t app_address)
{
    typedef void (*_func)(void);

    __disable_irq();

    /* MCU peripherals re-initial. */
    {
        GPIO_InitTypeDef GPIO_InitStruct;

        GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_NOPULL;

        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
        GPIO_InitStruct.GPIO_Pin &= ~(GPIO_Pin_13 | GPIO_Pin_14); /* SWDIO/SWCLK */
        GPIO_Init(GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
        GPIO_Init(GPIOB, &GPIO_InitStruct);
        GPIO_Init(GPIOC, &GPIO_InitStruct);
        GPIO_Init(GPIOD, &GPIO_InitStruct);
        GPIO_Init(GPIOE, &GPIO_InitStruct);
        GPIO_Init(GPIOF, &GPIO_InitStruct);
        GPIO_Init(GPIOG, &GPIO_InitStruct);
        GPIO_Init(GPIOH, &GPIO_InitStruct);
        GPIO_Init(GPIOI, &GPIO_InitStruct);

        /* reset systick */
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;

        /* disable all peripherals clock. */
        RCC->AHB1ENR = (1<<20); /* 20: F4 CCMDAT ARAMEN. */
        RCC->AHB2ENR = 0;
        RCC->AHB3ENR = 0;
        RCC->APB1ENR = 0;
        RCC->APB2ENR = 0;

        /* Switch to default cpu clock. */
        RCC->CFGR = 0;
    } /* MCU peripherals re-initial. */

    /* Disable MPU */
    MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;

    /* disable and clean up all interrupts. */
    {
        int i;

        for(i = 0; i < 8; i++)
        {
            /* disable interrupts. */
            NVIC->ICER[i] = 0xFFFFFFFF;

            /* clean up interrupts flags. */
            NVIC->ICPR[i] = 0xFFFFFFFF;
        }
    }

    /* Set new vector table pointer */
    SCB->VTOR = app_address;

    /* reset register values */
    __set_BASEPRI(0);
    __set_FAULTMASK(0);

    /* set up MSP and switch to it */
    __set_MSP(*(uint32_t*)app_address);
    __set_PSP(*(uint32_t*)app_address);
    __set_CONTROL(0);

    /* ensure what we have done could take effect */
    __ISB();

    __disable_irq();

    /* never return */
    ((_func)(*(uint32_t*)(app_address + 4)))();
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-8-30 01:34:24 | 显示全部楼层
估计还是你的中断向量设置问题。
回复

使用道具 举报

11

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-7-6
在线时间
20 小时
 楼主| 发表于 2018-8-30 10:11:53 | 显示全部楼层
正点原子 发表于 2018-8-30 01:34
估计还是你的中断向量设置问题。

原子哥,带ucos的APP中断向量应该怎么设置?我网上看了一下有人说在OSStart()函数前再加SCB->VTOR=FLASH_BASE|0x10000;但是还是不行。
回复

使用道具 举报

11

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-7-6
在线时间
20 小时
 楼主| 发表于 2018-8-30 11:03:20 | 显示全部楼层
正点原子 发表于 2018-8-30 01:34
估计还是你的中断向量设置问题。

或者说,我应该怎么设置中断向量
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-4-12
在线时间
1 小时
发表于 2018-8-30 16:25:35 | 显示全部楼层
可以选择 看看 最后  SysTick_Handler   SVC_Handler  PendSV_Handler的优先级  stm32优先级好像是最小优先级最高 但是RTX中数值越大优先级越高 可以看看ucos的优先级  
回复

使用道具 举报

11

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-7-6
在线时间
20 小时
 楼主| 发表于 2018-9-2 12:30:11 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-29 20:54
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8 ...

朋友,这里的app_address是APP程序的起始地址吗?可不可以加你QQ或者微信请教一下
回复

使用道具 举报

2

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-9-21
在线时间
50 小时
发表于 2018-9-18 09:47:09 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-29 20:54
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8 ...

我也遇到这个问题了,可以留个联系方式吗?
回复

使用道具 举报

2

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-9-21
在线时间
50 小时
发表于 2018-9-18 09:52:01 | 显示全部楼层
请问这个问题解决了吗???
回复

使用道具 举报

5

主题

63

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-6-15
在线时间
28 小时
发表于 2018-9-18 14:38:04 | 显示全部楼层
我也遇到一模一样的问题,请问楼主问题解决了吗?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-7-31
在线时间
6 小时
发表于 2019-8-22 09:45:30 | 显示全部楼层
正点原子 发表于 2018-8-30 01:34
估计还是你的中断向量设置问题。

你好!我在升级I带OS的APP程序时,APP总是卡死 为什么,可以分享一下经验吗  谢谢大师
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-7-31
在线时间
6 小时
发表于 2019-8-22 09:47:03 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-29 20:54
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8 ...

你好  我加上之后还是不行  为什么,可以帮忙分析一下吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-26
在线时间
5 小时
发表于 2019-9-19 11:12:21 | 显示全部楼层
2楼是正解!!大神!
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2019-7-8
在线时间
21 小时
发表于 2019-10-18 13:06:45 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-29 20:54
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8 ...

有代码工程吗,我也遇到了这个问题
回复

使用道具 举报

1

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1718
金钱
1718
注册时间
2019-8-4
在线时间
269 小时
发表于 2020-3-27 17:31:17 | 显示全部楼层
我也遇到了同样的问题,裸机怎么跳都行,但是加到ucos就是跳不进去,用的原子的历程,这个怎么解决呀
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-4-2
在线时间
1 小时
发表于 2020-4-2 16:48:11 | 显示全部楼层
。。。。裸跑和系统的压寨地址不一样。。。。我告诉你一个简单的方法,每次下载完APP,芯片复位重新进入,在开启其他外设前直接跳入APP,百分百成功,你可以想一想
回复

使用道具 举报

5

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2019-12-5
在线时间
48 小时
发表于 2020-4-19 16:03:12 | 显示全部楼层
2楼正解,验证可行。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-1-3
在线时间
8 小时
发表于 2020-12-31 18:49:14 | 显示全部楼层
我也遇到这个问题,裸机跳转FreeRtos就不行,Rtos跳转Rtos或者裸机跳转裸机就没事。
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-3-5
在线时间
14 小时
发表于 2021-8-26 17:19:44 | 显示全部楼层
hi我歌月徘徊 发表于 2018-8-29 20:54
我也遇到过这样的问题 原子的例程 裸机怎么跳都没事 带ucos就不行 换用下面的跳转代码解决问题了
//2018/8 ...

感谢贡献,问题得到解决
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-5-16
在线时间
6 小时
发表于 2021-8-27 09:15:28 | 显示全部楼层
给大家个思路,执行完所有bootload流程后别跟跳转,执行完流程后跟软复位,在FBL引导程序的一开始执行判断标志跳转,这样硬件所有外设都没执行,处于复位状态,在这种情况下跳转至任何地方都行,不区分于裸机或系统。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-9-17
在线时间
0 小时
发表于 2021-9-17 10:09:46 来自手机 | 显示全部楼层
daixikai 发表于 2019-9-19 11:12
2楼是正解!!大神!

大佬,二楼代码我试了,跳转之后直接黑屏,可能我方法不对,能指导一下吗
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-9-17
在线时间
0 小时
发表于 2021-9-17 10:10:36 来自手机 | 显示全部楼层
Liao123 发表于 2021-8-26 17:19
感谢贡献,问题得到解决

我还没解决这个,能指导一下吗,我871831678
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-9-17
在线时间
0 小时
发表于 2021-9-17 10:10:59 来自手机 | 显示全部楼层
871831678 发表于 2021-9-17 10:10
我还没解决这个,能指导一下吗,我871831678

qq871831678
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2021-3-5
在线时间
14 小时
发表于 2021-10-19 11:17:03 | 显示全部楼层
871831678 发表于 2021-9-17 10:10
我还没解决这个,能指导一下吗,我871831678

二楼的就是正解,在跳转到系统之前关闭掉所有的资源就可以了。
回复

使用道具 举报

0

主题

24

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-8-17
在线时间
82 小时
发表于 2021-10-20 15:45:03 | 显示全部楼层
学习一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 20:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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