From fe42bc0a34b5d25ccac1146ee466c035858a9b46 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: Fri, 5 Jan 2024 18:31:05 +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 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/说明文档/CosyOS原理与应用.md b/说明文档/CosyOS原理与应用.md index e1ae666..0f0221c 100644 --- a/说明文档/CosyOS原理与应用.md +++ b/说明文档/CosyOS原理与应用.md @@ -301,16 +301,16 @@ MCU的核心价值在于中断的使用,实现对紧急事件的及时响应 再把结构体指针存入中断挂起服务缓存队列(PendSV_FIFO),再触发PendSV,而后在PendSV中执行。 ### 互斥访问机制 -* 用户中断中读全局变量
+* **中断中读全局变量**
重入访问:如果变量正在被写入,仍可成功读取变量。
首先,用户需定义全局变量的副本,并按照指定方式来更新副本。中断中读全局变量时,
需调用 iWhichGVarToRead 来询问:应该读哪一个全局变量?返回0读正本,返回1读副本。
-* 用户中断中接收邮件
+* **中断中接收邮件**
重入访问:如果邮箱正在被写入,仍可成功接收邮件(将读取写入过程所读取的局部邮箱)。
互斥访问:如果邮箱正在被写入,将返回失败(false)。
-* 用户中断中接收消息
+* **中断中接收消息**
互斥访问:如果队列正在被访问,将返回失败(NULL)。
### 中断挂起服务缓存 @@ -326,18 +326,18 @@ CosyOS-II 中断挂起服务缓存队列(PendSV_FIFO),已实现所有内 ### 调用服务注意事项 在中断中调用服务时,需要注意以下事项。
-* 用户中断中写全局变量
+* **中断中写全局变量**
当用户在中断中调用iWriteGVar(gv, lv)、iWriteGAry(gp, lp, size)、iWriteGStr(gs, ls)写一个全局变量时,局部变量要做为专用。
1、当服务调用以后,该局部变量在本次中断中不应该被改变,原因是写全局变量为挂起服务;
2、如果某次进入中断以后,该局部变量被更新,必须再次调用相同的服务写同一个全局变量。
-* 用户中断中发送邮件
+* **中断中发送邮件**
当用户在中断中调用iSendMail(mbox, mail)发送邮件时,mail所指向的局部邮箱要做为专用。
1、当服务调用以后,该局部邮箱在本次中断中不应该被改变,原因是发送邮件为挂起服务;
2、如果某次进入中断以后,该局部邮箱被更新,必须再次调用相同的服务发送邮件至同一个邮箱。
-* 用户中断中接收邮件
+* **中断中接收邮件**
1、当用户在中断中调用iRecvMail(mail, mbox)接收邮件时,其它不同优先级的中断、任务、滴答,均不可再接收这一邮箱中的邮件。也就是说,所有任务和滴答可以接收来自同一个邮箱中的邮件;所有相同优先级的中断可以接收来自同一个邮箱中的邮件。
2、当邮箱的数据类型为非原子访问类型时,中断最好不要发送邮件给中断(除非这个中断的发生频率足够低,可确保在PendSV中最终完成发送以后,这个中断才会再次发生),否则会有出错的风险。
-* 用户中断中接收飞信
+* **中断中接收飞信**
1、当用户在中断中调用iRecvFetion(tbox)接收飞信时,其它不同优先级的中断、任务、滴答,均不可再接收这一信箱中的飞信。也就是说,所有任务和滴答可以接收来自同一个信箱中的飞信;所有相同优先级的中断可以接收来自同一个信箱中的飞信。
## 第三章、线程同步