STM32下采用什么方法关全局中断好?

2019-12-27 18:43发布

以前关中断都是用如下库函数,即设置CPSR。但现在看了函数说明,调用要在特权模式下才行,如果我要在用户模式下关中断要怎么处理好呢?大家是不是关中断也用的此办法?
2017-07-06_135109.png (10.59 KB, 下载次数: 0) 下载附件 2017-7-6 13:51 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
redroof
1楼-- · 2019-12-28 19:46
security 发表于 2017-7-7 00:37
特权模式和用户模式,与上不上 RTOS 没有必然的关系。
裸奔,照样可以分权限。 ...

至少99%以上的裸奔的人,以及90%以上的跑RTOS的人,都是不分权限的,永远用特权模式。
或许你能找到几个裸奔还区分权限的人吧,反正我这么久以来没见过
security
2楼-- · 2019-12-28 21:40
redroof 发表于 2017-7-7 09:05
至少99%以上的裸奔的人,以及90%以上的跑RTOS的人,都是不分权限的,永远用特权模式。
或许你能找到几个 ...

你说得对,裸奔区分权限的,的确很少(RTOS 都不多)。

我那个回复,只是针对 LZ 在 4 楼的回复,
在我看来,LZ 似乎认为 SVC 是操作系统的专属特性,在裸奔下,如果区分了特权,就没法使用 SVC,找不到可行的办法。
我只想说,SVC 是 CPU 的特性,裸奔区分权限的话,照样是通过 SVC 来解决。
myxiaonia
3楼-- · 2019-12-29 02:39
 精彩回答 2  元偷偷看……
security
4楼-- · 2019-12-29 06:45
myxiaonia 发表于 2017-7-7 09:34
我尝试过你的问题,rtx中如果使用非特权模式,关中断倒还行,用svc,开中断就不行了

所以此问题是无解的 ...

Cortex-M,SVC 无法开中断?知道具体原因吗?
如果这样不行话,那或许能用用我在 3 楼说的第 2 种方法(至少在 ARM9 上,第 2 种方案是验证过的)。
myxiaonia
5楼-- · 2019-12-29 07:10
security 发表于 2017-7-7 10:25
Cortex-M,SVC 无法开中断?知道具体原因吗?
如果这样不行话,那或许能用用我在 3 楼说的第 2 种方法( ...

非特权模式下无法开中断了啊,连svc也无效了
security
6楼-- · 2019-12-29 10:56
myxiaonia 发表于 2017-7-7 10:49
非特权模式下无法开中断了啊,连svc也无效了

这样啊,
那就用我说的第 2 种方法吧:
SVC 负责切入到特权模式,
而后,关中断、执行硬件临界区代码、开中断,
最后再适时,返回到用户模式。

一周热门 更多>