mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 19:39:42 +08:00
@@ -312,6 +312,7 @@ CosyOS的临界区可分为 **任务临界区**、**服务层临界区**、**全
|
||||
**1、任务临界区** <br>
|
||||
任务级的临界区保护,仅关闭系统中断(SysTick、PendSV)。<br>
|
||||
_任务临界区不会破坏零中断延迟,当需要任务级的临界区保护时,可以考虑。_ <br>
|
||||
|
||||
**2、服务层临界区** <br>
|
||||
【任务临界区 + 系统滴答 + 挂起服务调用/钩子】,即CosyOS实时运行模型中的服务层,是系统级的临界区保护。<br>
|
||||
具体过程:<br>
|
||||
@@ -320,6 +321,7 @@ CosyOS的临界区可分为 **任务临界区**、**服务层临界区**、**全
|
||||
(3)中断中:采用挂起服务调用/钩子来访问;<br>
|
||||
如此,即可实现全局成功的互斥访问。<br>
|
||||
_服务层临界区不会破坏零中断延迟,当需要系统级的临界区保护时,应首先予以考虑。_ <br>
|
||||
|
||||
**3、全局临界区** <br>
|
||||
系统级的临界区保护,一般会关闭总中断。<br>
|
||||
具体方式:<br>
|
||||
@@ -329,7 +331,7 @@ Arm:<br>
|
||||
(2)操作FAULTMASK,会关闭总中断。<br>
|
||||
(3)操作BASEPRI,可实现不同掩蔽范围的全局临界区保护,不会关闭总中断。<br>
|
||||
_CosyOS内核中从来不会进入全局临界区,提供此项服务只是为了便于用户对全局公共资源或程序过程的保护。_ <br>
|
||||
关闭总中断方式的全局临界区,会破坏零中断延迟,为最后的选项,是不得已而用之。<br>
|
||||
_全局临界区会破坏零中断延迟,为最后的选项,不可轻易使用。_ <br><br>
|
||||
任务临界区、全局临界区,都支持嵌套功能,最大嵌套深度:255。<br>
|
||||
|
||||
* **何时应用临界区** <br>
|
||||
@@ -348,8 +350,8 @@ Arm:<br>
|
||||
2、任务临界区:访问过程迅速的、实时性要求较高的,可考虑任务临界区。<br>
|
||||
* **全局公共资源** <br>
|
||||
1、服务层临界区:即可实现全局成功的互斥访问,又不会破坏零中断延迟,是最优方案,应首先予以考虑。<br>
|
||||
2、二值信号量:弊端是如果获取失败将导致访问失败。<br>
|
||||
3、全局临界区:弊端是如果是关闭总中断方式,会破坏零中断延迟。<br>
|
||||
2、二值信号量:弊端是如果获取失败将导致访问失败,而从概率来说,获取失败是必然会发生的。<br>
|
||||
3、全局临界区:弊端是全局临界区会破坏零中断延迟,为最后的选项,不可轻易使用。<br>
|
||||
|
||||
## 第六章、定时服务
|
||||
我们知道,MCU都有硬件定时器和定时器中断,当定时器溢出时,CPU可以响应中断并调用定时器中断服务程序。<br>
|
||||
|
||||
Reference in New Issue
Block a user