From 669ec08ca110eeb473fc757dd198f833a6e1d732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B6=E4=B8=AD=E6=96=AD=E5=BB=B6=E8=BF=9F=E7=9A=84RTOS?= Date: Sat, 6 Jan 2024 10:01:17 +0000 Subject: [PATCH] =?UTF-8?q?update=20=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3/C?= =?UTF-8?q?osyOS=E5=8E=9F=E7=90=86=E4=B8=8E=E5=BA=94=E7=94=A8.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 零中断延迟的RTOS --- 说明文档/CosyOS原理与应用.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/说明文档/CosyOS原理与应用.md b/说明文档/CosyOS原理与应用.md index 2e5c444..fb3cdac 100644 --- a/说明文档/CosyOS原理与应用.md +++ b/说明文档/CosyOS原理与应用.md @@ -388,6 +388,20 @@ CosyOS-II 中断挂起服务缓存队列(PendSV_FIFO),已实现所有内 * **分类二**
可重入访问、互斥访问;
+### 临界区 +CosyOS的临界区可分为任务临界区、服务层临界区、全局临界区。
+* **任务临界区** 任务级的临界区保护,仅关闭系统中断(SysTick、PendSV)。
+* **服务层临界区** 任务临界区 + 系统滴答 + 挂起服务调用/挂起服务钩子,即CosyOS实时运行模型中的服务层,可实现系统级的临界区保护。
+* **全局临界区** 系统级的临界区保护,会关闭总中断。
+CosyOS内核中从来不会进入全局临界区,提供此项服务只是为了便于用户对全局公共资源和程序过程的保护。
+ +任务临界区、全局临界区,都支持嵌套功能,最大嵌套深度:255。
+ +### 何时考虑应用临界区? +1、对于CosyOS已经提供服务支持的功能,用户直接调用API实现即可,无需考虑临界区问题。
+2、只有在任务中访问“事件标志组”和“非原子全局变量”时才需要用户自己进入“任务临界区”实现,具体请查阅《API用户参考手册》。
+3、用户对其它公共资源或程序过程(不可重入)的保护,再考虑“临界区”或其它方式实现。
+ ### 互斥访问 各访问者对同一个目标资源的访问过程是互相排斥的,即每次只允许一个访问者访问目标资源,目标资源是不可重入资源。
下列所述为CosyOS推荐方案:
@@ -395,7 +409,7 @@ CosyOS-II 中断挂起服务缓存队列(PendSV_FIFO),已实现所有内 1、互斥信号量:访问耗时的、实时性要求不高的,应尽量采用互斥信号量。
2、任务临界区:访问迅速的、实时性要求较高的,再考虑任务临界区。
* **全局公共资源**
-1、任务临界区 + 挂起服务调用/挂起服务钩子:此方式为最优解,可实现全局成功的互斥访问。
+1、服务层临界区:此方式为最优解,可实现全局成功的互斥访问。
2、二值信号量:弊端是如果获取失败将导致访问失败。
3、全局临界区:弊端是关闭总中断会破坏零中断延迟。