硬汉嵌入式论坛

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

[有问必答] 程序内跳转stm32的系统自带boot,为什么必须加__set_CONTROL(0)

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2023-6-26 09:41:22 | 显示全部楼层 |阅读模式


做内部函数跳转到stm32系统自带的bootload  地址为(0x1FFF0000)处,参考了csdn上的一些代码,总是不成功。
现象是,跳转成功,但是没有办法用stm32cubeprogram识别并连接。


后来,偶然看到一个示例中,在跳转前加了 __set_CONTROL(0);就成功了。 这是为什么呢?



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-26 10:50:08 | 显示全部楼层
在在 RTOS 工程,这条语句很重要,设置为特权级模式,使用 MSP 指针,然后跳转
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2023-6-26 13:23:45 | 显示全部楼层
eric2013 发表于 2023-6-26 10:50
在在 RTOS 工程,这条语句很重要,设置为特权级模式,使用 MSP 指针,然后跳转

不管用FreeRTOS,还是RTX,还是UCOS,还是threadX,都必须这一句代码吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-26 15:01:55 | 显示全部楼层
caicaptain2 发表于 2023-6-26 13:23
不管用FreeRTOS,还是RTX,还是UCOS,还是threadX,都必须这一句代码吗?

是的,现在各种RTOS都是双栈用法,任务里面使用PSP,中断里面是MSP
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-6-28 15:53:20 | 显示全部楼层
本帖最后由 yunqi 于 2023-6-28 16:21 编辑

[C] 纯文本查看 复制代码
CONTROL 寄存器也是通过 MRS 和 MSR 指令来操作的:
MRS R0, CONTROL
MSR CONTROL, R0
Control.png
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-6-28 15:57:33 | 显示全部楼层
Cortex-M3 处理器支持两种工作模式,线程模式和处理模式:
--在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权代码能够在线程模式下运行。
--出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2023-6-28 16:53:54 | 显示全部楼层
yunqi 发表于 2023-6-28 15:57
Cortex-M3 处理器支持两种工作模式,线程模式和处理模式:
--在复位时处理器进入线程模式,异常返回时也会 ...

stm32系统自带的bootload  地址为(0x1FFF0000)处,不过也是一段固化的代码。

我的疑问是,这个代码并不会造成硬件fault之类的异常,为什么一定要设定为特权模式才能运行bootload?
似乎只是为了切换到复位后默认的MSP指针而已? 与特权等级无关?
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-6-29 09:13:51 | 显示全部楼层
caicaptain2 发表于 2023-6-28 16:53
stm32系统自带的bootload  地址为(0x1FFF0000)处,不过也是一段固化的代码。

我的疑问是,这个代码并 ...

我猜测,是因为跳转后执行的Boot代码,要重新初始化,而这部门初始化的有些操作,需要特权模式才能执行。否则会报异常。
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-6-29 09:16:22 | 显示全部楼层
eric2013 发表于 2023-6-26 15:01
是的,现在各种RTOS都是双栈用法,任务里面使用PSP,中断里面是MSP

站长,你见过PSRAM存储器没?有推荐型号没。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-30 09:34:58 | 显示全部楼层
yunqi 发表于 2023-6-29 09:16
站长,你见过PSRAM存储器没?有推荐型号没。

整理了三个厂家
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 17:38 , Processed in 0.329321 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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