【RT-Thread读书笔记】6. RT-Thread 学习7章读后感
[复制链接]
【RT-Thread读书笔记】6. RT-Thread 学习7章读后感 ---临界段的保护 1.临界段的定义:一段代码在执行的时候不能被中断被称为临界段。 为什么会在RTOS中定义临界段, 是因为实时操作系统中有一些优先级非常高,或者说非常重要的任务或者线程需要运行,且不能被中断。 那么什么情况下临界段会被打断?一个是系统调度,还有一个就是外部中断。在RT-Thread,系统调度,最终也是产生PendSV中断,在PendSV Handler里面实现线程的切换,所以还是可以归结为中断。既然这样,RT-Thread对临界段的保护就处理的很干脆了,直接把中断全部关了,NMI FAULT 和硬FAULT除外。
3.关中断怎么关?也是很有讲究的。
因为临界段也可能会嵌套,什么意思呢? 就是临界段中嵌套临界段,就像中断里面嵌套中断一样,这时要怎么处理呢?
RT-Thread是这样做的:
- ;/*
- ; * rt_base_t rt_hw_interrupt_disable();
- ; */
- rt_hw_interrupt_disable PROC
- EXPORT rt_hw_interrupt_disable
- MRS r0, PRIMASK
- CPSID I
- BX LR
- ENDP
- ;/*
- ; * void rt_hw_interrupt_enable(rt_base_t level);
- ; */
- rt_hw_interrupt_enable PROC
- EXPORT rt_hw_interrupt_enable
- MSR PRIMASK, r0
- BX LR
- ENDP
复制代码
二级嵌套临界代码段:
一重临界段代码的保护:
临界段的保护是比较重要的东西,理解它就行,特别是关开中断的顺序,应当充分理解这些指令以及指令的范围。
此内容由EEWORLD论坛网友传媒学子原创,如需转载或用于商业用途需征得作者同意并注明出处
|