硬汉嵌入式论坛

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

[其它] 标准库3.5里面__disable_irq()函数不能关全局中断

[复制链接]

5

主题

100

回帖

115

积分

初级会员

积分
115
发表于 2022-6-27 20:03:38 | 显示全部楼层 |阅读模式
发现使用了__disable_irq()也无法关全局中断,有人说要在特权模式下才生效,那么怎样开启特权模式?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2022-6-27 20:29:30 | 显示全部楼层
1、开关全局中断跟是否在特权机模式没有关系,系统上电默认就是特权机模式。
2、特权机和非特权级控制是通过CONTROL寄存器控制的。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2022-6-27 20:30:41 | 显示全部楼层
__disable_irq是CMSIS的函数,你又不会切到用户模式,不会有问题

[C] 纯文本查看 复制代码
__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void)
{
  __ASM volatile ("cpsid i" : : : "memory");
}
回复

使用道具 举报

3

主题

338

回帖

347

积分

高级会员

积分
347
发表于 2022-6-27 22:07:52 | 显示全部楼层
如果你用了RTX4,那的确有可能以非特权级运行线程的。这是需要确保OS_RUNPRIV宏为1,才会以特权级运行线程。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 02:45 , Processed in 0.154915 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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