update 说明文档/CosyOS原理与应用.md.

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2024-01-05 18:31:05 +00:00
committed by Gitee
parent 6ae106cc7f
commit fe42bc0a34

View File

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