硬汉嵌入式论坛

 找回密码
 立即注册
查看: 12594|回复: 40
收起左侧

[RTOS] 分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-4-10 01:15:54 | 显示全部楼层 |阅读模式
以V7开发板为例进行说明:
BOOT :RTX5 BOOT.rar (2.67MB)
APP :RTX5 APP.rar (2.67MB)

不仅仅是RTX5,其它RTOS都适用。

BOOT程序说明:


BOOT程序比较简单,直接下载即可,按下K1按键即可跳转(松手检测),跳转地址0x08100000。

BOOT程序运行的时候是LED2闪烁,而APP程序运行的时候是LED4闪烁,可以简单区分状态。


1.png


APP程序说明:

按下K2按键(松手检测),从APP跳回到BOOT。

APP应用程序,下载的时候设置这里的起始地址和大小:

2.png

而对于APP程序,特别注意设置这两个地方,我们当前是把程序放在了0x08100000地址,中断向量表也放在这个位置。
3.png
4.png






评分

参与人数 1金币 +20 收起 理由
mcj + 20 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-4-10 01:35:38 | 显示全部楼层
整理完毕。
回复

使用道具 举报

4

主题

33

回帖

45

积分

新手上路

积分
45
发表于 2020-4-10 08:02:30 | 显示全部楼层
支持 支持
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-4-10 08:25:03 | 显示全部楼层
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2020-4-10 08:43:01 | 显示全部楼层
https://gitee.com/spunky_973/rt-fota  这有一个基于RTT的BOOT,看样子现在基于RTOS做boot慢慢流行起来了。
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2020-4-10 08:44:10 | 显示全部楼层
这个BOOT是用户自己实现的了,上次是ST出厂BOOT,齐全了啊
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-4-10 08:56:32 | 显示全部楼层
,强
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2020-4-10 09:21:22 | 显示全部楼层
硬汉哥,这两个bin文件可以合到一起下载吗,第一次要是每次都下载两次有点麻烦
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-4-10 10:12:14 | 显示全部楼层
yuanzhongda 发表于 2020-4-10 09:21
硬汉哥,这两个bin文件可以合到一起下载吗,第一次要是每次都下载两次有点麻烦

hex文件合并批处理文件,用于合并app,iap比较省事,多少个都没关系,可以指定地址
http://www.armbbs.cn/forum.php?m ... 9420&fromuid=58
(出处: 硬汉嵌入式论坛)

使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载
http://www.armbbs.cn/forum.php?m ... 6166&fromuid=58
(出处: 硬汉嵌入式论坛)

评分

参与人数 1金币 +20 收起 理由
role_2099 + 20 很给力!

查看全部评分

回复

使用道具 举报

10

主题

92

回帖

122

积分

初级会员

积分
122
发表于 2020-4-10 16:15:55 | 显示全部楼层
牛啊, 这速度!
回复

使用道具 举报

10

主题

92

回帖

122

积分

初级会员

积分
122
发表于 2020-4-10 16:36:19 | 显示全部楼层
刚试了, 可以正常跳转
太感谢了!!
回复

使用道具 举报

19

主题

150

回帖

207

积分

高级会员

积分
207
发表于 2020-6-9 16:34:23 | 显示全部楼层
赞。有UCOSII+V6板子的更好。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-6-9 16:37:39 | 显示全部楼层
tianqi911 发表于 2020-6-9 16:34
赞。有UCOSII+V6板子的更好。

还别说,还真有一个,不过是III。

基于STM32H7的BOOT和APP代码都使用最新版uCOS-III V3.08.00的案例,相互之间任意跳转
http://www.armbbs.cn/forum.php?m ... 7260&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

19

主题

150

回帖

207

积分

高级会员

积分
207
发表于 2020-6-11 09:22:53 | 显示全部楼层
eric2013 发表于 2020-6-9 16:37
还别说,还真有一个,不过是III。

基于STM32H7的BOOT和APP代码都使用最新版uCOS-III V3.08.00的案例, ...

哇塞。赞一个。
回复

使用道具 举报

1

主题

37

回帖

40

积分

新手上路

积分
40
发表于 2020-6-18 11:29:40 | 显示全部楼层
我按照上面的BOOT :RTX5 BOOT.rar (2.67MB)例程做了一个V7的app程序。
1:APP :RTX5 APP.rar (2.67MB)例程里面没有加入stm32-v7.sct,我的程序面需要stm32-v7.sct,无法跳转成功。
2:解决办法:需要把stm32-v7.sc 文件里面的
LR_IROM1 0x08100000 0x00200000  {    ; load region size_region
  ER_IROM1 0x08100000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }

这样对吗? 请教硬汉!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-6-19 09:23:02 | 显示全部楼层
willsonxie 发表于 2020-6-18 11:29
我按照上面的BOOT :RTX5 BOOT.rar (2.67MB)例程做了一个V7的app程序。
1:APP :RTX5 APP.rar (2.67MB)例程 ...


如果加入了sct,配置要以sct为准,设置option已经不起作用了。
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-7-16 13:40:40 | 显示全部楼层
谢谢硬汉又学到了一点知识
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2020-9-2 11:28:43 | 显示全部楼层
这个boot怎么烧录APP的? 直接把bin文件发送到串口,SPI之类的??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-9-2 11:29:35 | 显示全部楼层
sapoiuyt 发表于 2020-9-2 11:28
这个boot怎么烧录APP的? 直接把bin文件发送到串口,SPI之类的??

使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载
http://www.armbbs.cn/forum.php?m ... 6166&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

132

回帖

147

积分

初级会员

积分
147
发表于 2020-9-3 18:26:35 | 显示全部楼层
硬汉老师,stm32开启读保护后是不是就不可以用系统bootloader了?要用ID加密吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-9-4 01:45:40 | 显示全部楼层
无关风月 发表于 2020-9-3 18:26
硬汉老师,stm32开启读保护后是不是就不可以用系统bootloader了?要用ID加密吗?

这里有读保护说明

STM32H7内部Flash的读保护说明(Level0默认,Level1连接保护,Level2设备和自举保护)
http://www.armbbs.cn/forum.php?m ... 6660&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-4-1 09:16:47 | 显示全部楼层
牛啊, 这速度!
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2021-6-17 11:38:43 | 显示全部楼层
本帖最后由 yuanzhongda 于 2021-9-21 00:18 编辑

        请教个问题
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2021-9-20 21:44:51 | 显示全部楼层
H7TOOL的app地址为何是下载到0x08000000不是boot的跳转地址呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-9-21 09:06:21 | 显示全部楼层
yuanzhongda 发表于 2021-9-20 21:44
H7TOOL的app地址为何是下载到0x08000000不是boot的跳转地址呢

不是,APP是下载到0x0802 0000地址的。
回复

使用道具 举报

2

主题

62

回帖

68

积分

初级会员

积分
68
发表于 2021-9-22 11:29:39 | 显示全部楼层
bank swap 功能更好用,不怕升级失败的问题
回复

使用道具 举报

10

主题

130

回帖

160

积分

初级会员

积分
160
发表于 2022-2-18 20:05:58 | 显示全部楼层
硬汉 跳转threadx的有吗  现在threadx的生成都是AC6
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-2-20 10:29:45 | 显示全部楼层
oneV 发表于 2022-2-18 20:05
硬汉 跳转threadx的有吗  现在threadx的生成都是AC6

ThreadX的还没做,这几天我做个。
回复

使用道具 举报

10

主题

130

回帖

160

积分

初级会员

积分
160
发表于 2022-2-21 09:56:08 | 显示全部楼层
eric2013 发表于 2022-2-20 10:29
ThreadX的还没做,这几天我做个。

能不能顺便待机的也加入一下做个测试  我加入待机好像死活不行
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-2-21 09:56:59 | 显示全部楼层
oneV 发表于 2022-2-21 09:56
能不能顺便待机的也加入一下做个测试  我加入待机好像死活不行

好的。
回复

使用道具 举报

10

主题

130

回帖

160

积分

初级会员

积分
160
发表于 2022-2-27 20:02:42 | 显示全部楼层
oneV 发表于 2022-2-21 09:56
能不能顺便待机的也加入一下做个测试  我加入待机好像死活不行

自我解答一波, IAP(AC5/AC6)跳APP(带threadx)其实本身没有问题,我之前死活不行还是自己的锅,加入了待机和WWDG,WWDG在我的应用中设置要久一点不然refresh不成功。跟待机没关系。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-2-28 05:10:01 | 显示全部楼层
oneV 发表于 2022-2-27 20:02
自我解答一波, IAP(AC5/AC6)跳APP(带threadx)其实本身没有问题,我之前死活不行还是自己的锅,加入 ...

谢谢告知最终问题。
回复

使用道具 举报

12

主题

68

回帖

104

积分

初级会员

积分
104
发表于 2022-3-31 10:00:29 | 显示全部楼层
硬汉哥,从app跳转到Boot后,硬件外设会复位吗?还是说boot需要重新配置外设?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-4-1 10:09:34 | 显示全部楼层
weboser 发表于 2022-3-31 10:00
硬汉哥,从app跳转到Boot后,硬件外设会复位吗?还是说boot需要重新配置外设?

app往boot跳转,直接软件复位更简单。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2022-4-16 15:49:17 | 显示全部楼层
我使用的是stm32F207vet  512flash  256RAM
定义 uint32_t g_JumpInit __attribute__((at(0x20000000), zero_init));   
报错:WGS21070\WGS21070.axf: Error: L6971E: cjson.o(.data) type RW incompatible with main.o(.ARM.__AT_0x20000000) type ZI in er RW_IRAM1.
把0x20000000改为 0x20001000以下才可以
uint32_t g_JumpInit __attribute__((at(0x20001000), zero_init));   
这里的zero_init  是什么意思啊  看到并没有初始化全部内存
static void JumpToApp(void)
{
#if 0
        void (*SysMemBootJump)(void);        /* 声明一个函数指针 */
        __IO uint32_t  AppAddr = app_flash_addr_A; /* STM32H7的系统BootLoader地址 */

        if( (*(__IO uint32_t*)AppAddr) <0x20000000 ||  (*(__IO uint32_t*)AppAddr) > (0x20000000 + 0x20000) )  //地址不在在RAM范围之内 直接返回运行boot
                return ;
      
        g_JumpInit = 0xAA223344;  

        /* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */
        SysMemBootJump = (void (*)(void)) (*((uint32_t *) (AppAddr + 4)));

        /* 设置主堆栈指针 */
        __set_MSP(*(uint32_t *)AppAddr);
      

        /* 跳转到系统BootLoader */
        SysMemBootJump();

        /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
        while (1)
        {

        }
#else
        uint32_t i=0;
        void (*SysMemBootJump)(void);        /* 声明一个函数指针 */
        __IO uint32_t BootAddr = app_flash_addr_A; /* STM32H7的系统BootLoader地址 */
      

        /* 关闭全局中断 */
        __set_FAULTMASK(1);// 开启所有中端  DISABLE_INT();

        /* 关闭滴答定时器,复位到默认值 */
        SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

        /* 设置所有时钟到默认状态,使用HSI时钟 */
        HAL_RCC_DeInit();

        /* 关闭所有中断,清除所有中断挂起标志 */
        for (i = 0; i < 8; i++)
        {
                NVIC->ICER[i]=0xFFFFFFFF;
                NVIC->ICPR[i]=0xFFFFFFFF;
        }      

        /* 使能全局中断 */
        __set_FAULTMASK(0);// 开启所有中端ENABLE_INT();

        /* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */
        SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));

        /* 设置主堆栈指针 */
        __set_MSP(*(uint32_t *)BootAddr);
      
        /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
        __set_CONTROL(0);

        /* 跳转到系统BootLoader */
        SysMemBootJump();

        /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
        while (1)
        {

        }
      
#endif
}

这个跳转函数,单纯上电跳转app,下面的方法失败 进入硬件错误中断,怀疑boot和app内存没隔离的原因  上面的方法成功,没搞明白区别,请教一下。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-4-17 11:40:55 | 显示全部楼层
fuluoce 发表于 2022-4-16 15:49
我使用的是stm32F207vet  512flash  256RAM
定义 uint32_t g_JumpInit __attribute__((at(0x20000000), ze ...

1、Error: L6971E是定义冲突了。
2、不存在隔离开,隔离不开的问题,说明你的程序设计有问题。
跳转前没有提供干净的运行环境。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-6-7 09:40:50 | 显示全部楼层
请问这个srec_cat.exe计算crc值利用的是什么参数模型,我用hal库此算crc得到值对不上
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-6-8 09:58:57 | 显示全部楼层
hurricane 发表于 2022-6-7 09:40
请问这个srec_cat.exe计算crc值利用的是什么参数模型,我用hal库此算crc得到值对不上

成功实现MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较
https://www.armbbs.cn/forum.php? ... 7379&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2022-7-4 16:28:43 | 显示全部楼层
硬汉兄:请教一下,这个BOOT和APP跳转的例程是否适用于国产的M4核MCU?经对比发现国产的M4核的MCU所提供的库没有类似于SYSTEM_STM32H7XX.C文件可设置中断向量表偏移,中断向量表偏移可否在APP的main函数里进行设置?SCB->VTOR =XXXXXXXX.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2022-7-5 10:41:06 | 显示全部楼层
ldh2020 发表于 2022-7-4 16:28
硬汉兄:请教一下,这个BOOT和APP跳转的例程是否适用于国产的M4核MCU?经对比发现国产的M4核的MCU所提供的 ...

可以的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 05:38 , Processed in 0.441940 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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