硬汉嵌入式论坛

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

[STM32H7] 请问__set_CONTROL(0);还有什么代码可以代替?

[复制链接]
回帖奖励 6 个金币 回复本帖可获得 2 个金币奖励! 每人限 1 次

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2022-12-8 10:01:55 | 显示全部楼层 |阅读模式
我用的是eclipse开发,
[C] 纯文本查看 复制代码
void MSR_MSP(uint32_t addr)
{
	__asm volatile
	(
		"msr msp, r0   \n"
		"bx r14    \n"
	);
}


这样写是可以的,
但是我移植
[C] 纯文本查看 复制代码
__set_CONTROL(0);
这段代码的时候,eclipse不识别,用的arm-gcc编译,,这怎么办?
回复

使用道具 举报

19

主题

235

回帖

292

积分

高级会员

积分
292
发表于 2022-12-8 10:36:11 | 显示全部楼层
用 cmsis_gcc.h 里的

微信截图_20221208103359.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-12-8 11:13:37 | 显示全部楼层

回帖奖励 +2 个金币

用CMSIS软件,不要再自己写了。 也就是楼上坛友发的。

CMSIS软件包支持了MDK ,IAR和GCC
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2022-12-8 14:52:45 | 显示全部楼层
本帖最后由 incarry 于 2022-12-8 15:39 编辑
tovinz 发表于 2022-12-8 10:36
用 cmsis_gcc.h 里的

我如果直接用 __ASM volatile("MSR control, %0" : : "r" (0) : "memory");  这句话可以吗?
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2022-12-8 14:55:14 | 显示全部楼层
eric2013 发表于 2022-12-8 11:13
用CMSIS软件,不要再自己写了。 也就是楼上坛友发的。

CMSIS软件包支持了MDK ,IAR和GCC

硬汉老师,如果我不确定我要跳转的APP是不是RTOS,那我还需要__set_CONTROL(0);这个操作吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-12-8 15:56:15 | 显示全部楼层
incarry 发表于 2022-12-8 14:55
硬汉老师,如果我不确定我要跳转的APP是不是RTOS,那我还需要__set_CONTROL(0);这个操作吗?

统一操作,都加上省事。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2022-12-9 00:19:52 | 显示全部楼层

回帖奖励 +2 个金币

重复啰嗦下,复制来自CMSIS_GCC.h
/**
  \brief   Set Control Register
  \details Writes the given value to the Control Register.
  \param [in]    control  Control Register value to set
*/
__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control)
{
    __ASM volatile ("MSR control, %0" : : "r" (control) : "memory");
    __ISB();
}

回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2022-12-9 16:38:08 | 显示全部楼层
eric2013 发表于 2022-12-8 15:56
统一操作,都加上省事。

就是说,无论我要跳的APP是RTOS还是裸机程序,我都可以这样操作吗?这是什么原理呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-12-10 11:12:43 | 显示全部楼层
incarry 发表于 2022-12-9 16:38
就是说,无论我要跳的APP是RTOS还是裸机程序,我都可以这样操作吗?这是什么原理呢?

不是说都要加上,而是这种操作是个好习惯,不管是裸机还是OS,直接统一都采用一个跳转方案实现,简单省事。
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2022-12-10 13:55:31 | 显示全部楼层
eric2013 发表于 2022-12-10 11:12
不是说都要加上,而是这种操作是个好习惯,不管是裸机还是OS,直接统一都采用一个跳转方案实现,简单省事 ...

如果我要跳转的APP是裸机的话,跳转之前把切换到特权模式也可以吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-12-12 09:04:24 | 显示全部楼层
incarry 发表于 2022-12-10 13:55
如果我要跳转的APP是裸机的话,跳转之前把切换到特权模式也可以吗?

程序上电,默认状态就是特权级模式。这么说是否明白
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2022-12-23 16:56:35 | 显示全部楼层
eric2013 发表于 2022-12-12 09:04
程序上电,默认状态就是特权级模式。这么说是否明白

意思是不是先让启动的APP默认以特权模式启动,如果想切回来,再在APP里切就可以了?
回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2022-12-26 00:43:01 | 显示全部楼层
incarry 发表于 2022-12-23 16:56
意思是不是先让启动的APP默认以特权模式启动,如果想切回来,再在APP里切就可以了?

https://www.armbbs.cn/forum.php? ... hlight=%D6%D0%B6%CF
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 04:16 , Processed in 0.433203 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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