临界区和关中断,是否需要同时使用?

发布于 2020-12-31 08:40:06

MCU 内部 Flash 擦写的函数,不可以被打断。没有os的情况下,只需要关中断就可以。
有操作系统的情况下,还需要临界区保护吗?关了中断貌似就不能切换线程了,进出临界区是不是可以省略?

//////// 代码 ////////

rt_base_t level = rt_hw_interrupt_disable(); // 关中断
rt_enter_critical(); // 进入临界区。  // 问题点:这个是不是可以省略?

Flash_Unlock();
// Flash擦写函数
Flash_Lock();

rt_exit_critical(); // 离开临界区
rt_hw_interrupt_enable(level); // 开中断

查看更多

关注者
0
被浏览
340
3 个回答
caihaitao
caihaitao 2020-12-31

rt_enter_critical(); //可以省略
关闭中断之后,SysTick的中断也被屏蔽了,暂时无法得到执行。不会发生线程调度。

aozima
aozima 2020-12-31
拒绝白嫖,拒绝键盘侠!

关中断 > 关调度

只关中断即可。

杰瑞鼠
杰瑞鼠 2021-01-04

文档中心对这块有说明。这两个出现的位置时不同的。
1 关中断一般是在线程里面对某个代码段进行保护(但也有在中断中关中断,但很少用。我们在裸机下都是进入中断后顶多先屏蔽当前类型的中断而不是关总中断;OS中更不会在中断中关闭总中断)。
2 进出临界区一般都是用在中断ISR中,提示内核记录中断的嵌套或者就像有的内核资源,记录申请了多少次就释放多少次。文档中心说的是如果中断中有利用到类似信号量等内核资源,就需要给出进出指示。
【望采纳】

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览