From ce03ea55b80252beff6b26fe4cb8ecb452346abe 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: Mon, 29 Jan 2024 16:06:58 +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, 7 insertions(+), 9 deletions(-) diff --git a/说明文档/CosyOS原理与应用.md b/说明文档/CosyOS原理与应用.md index d1f7e8a..f7d7534 100644 --- a/说明文档/CosyOS原理与应用.md +++ b/说明文档/CosyOS原理与应用.md @@ -198,29 +198,27 @@ MCU的核心价值在于中断的使用,实现对紧急事件的及时响应 是指在滴答中调用的服务,并在滴答中执行。 用户可在滴答钩子、定时中断钩子、定时查询钩子中调用滴答服务。 * **中断服务** - 是指在用户中断中调用的服务,分为中断本地服务和中断挂起服务。 -* **中断本地服务** - 是指在用户中断中调用并在本地直接执行的服务,需要互斥访问机制相配合。 -* **中断挂起服务** - 是指在用户中断中调用的服务不在本地直接执行,而是把服务的相关内容存入局部的结构体中, - 再把结构体指针存入中断挂起服务缓存队列(PendSV_FIFO),再触发PendSV,而后在PendSV中执行。 + 是指在用户中断中调用的服务,分为 **中断本地服务** 和 **中断挂起服务**。 + * **中断本地服务** + 是指在用户中断中调用并在本地直接执行的服务,需要互斥访问机制相配合。 + * **中断挂起服务** + 是指在用户中断中调用的服务不在本地直接执行,而是把服务的相关内容存入局部的结构体中,
+ 再把结构体指针存入中断挂起服务缓存队列(PendSV_FIFO),再触发PendSV,而后在PendSV中执行。 #### 互斥访问机制 * **中断中读全局变量**
重入访问:如果变量正在被写入,仍可成功读取变量。
首先,用户需定义全局变量的副本,并按照指定方式来更新副本。中断中读全局变量时,
需调用 iWhichGVarToRead 来询问:应该读哪一个全局变量?返回0读正本,返回1读副本。
- * **中断中接收邮件**
重入访问:如果邮箱正在被写入,仍可成功接收邮件(将读取写入过程所读取的局部邮箱)。
互斥访问:如果邮箱正在被写入,将返回失败(false)。
- * **中断中接收消息**
互斥访问:如果队列正在被访问,将返回失败(NULL)。
#### 中断挂起服务缓存 CosyOS-II 中断挂起服务缓存队列(PendSV_FIFO),已实现所有内核的MCU均为先入先出队列(FIFO)。
-中断挂起服务缓存队列,有必要先入先出吗?答案是确定的,如同一中断中提请的各项服务,可能会存在时序逻辑关系。
+中断挂起服务缓存队列,有必要先入先出吗?答案是确定的,如在同一中断中先后提请的各项服务,可能会存在时序逻辑关系。
再有,“入队列”与“出队列”的过程必须是原子操作,“操作流”不能被打断。
### 中断使用注意事项