mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 19:39:42 +08:00
@@ -324,6 +324,25 @@ CosyOS-II 中断挂起服务缓存队列(PendSV_FIFO),已实现所有内
|
|||||||
* 用户中断应遵循快进快出的原则,对事件仅做必要的紧急处理,再以同步方式通知 **中断服务任务** 做善后处理。<br>
|
* 用户中断应遵循快进快出的原则,对事件仅做必要的紧急处理,再以同步方式通知 **中断服务任务** 做善后处理。<br>
|
||||||
* 用户中断的最大执行时间应远小于系统滴答周期,这将促使整个系统更加良性的运行。<br>
|
* 用户中断的最大执行时间应远小于系统滴答周期,这将促使整个系统更加良性的运行。<br>
|
||||||
|
|
||||||
|
### 中断中调用服务注意事项
|
||||||
|
凡事都是辩证的,有一利必有一弊。CosyOS在实现零中断延迟的同时,在服务的调用上,也必然会存在一些限制条件。<br>
|
||||||
|
* 一、用户中断中写全局变量<br>
|
||||||
|
当用户在中断中调用iWriteGVar(gv, lv)、iWriteGAry(gp, lp, size)、iWriteGStr(gs, ls)写一个全局变量时,局部变量要做为专用。<br>
|
||||||
|
1、当服务调用以后,该局部变量在本次中断中不应该被改变,原因是写全局变量为挂起服务;<br>
|
||||||
|
2、如果某次进入中断以后,该局部变量被更新,必须再次调用相同的服务写同一个全局变量。<br>
|
||||||
|
* 二、用户中断中发送邮件<br>
|
||||||
|
当用户在中断中调用iSendMail(mbox, mail)发送邮件时,mail所指向的局部邮箱要做为专用。<br>
|
||||||
|
1、当服务调用以后,该局部邮箱在本次中断中不应该被改变,原因是发送邮件为挂起服务;<br>
|
||||||
|
2、如果某次进入中断以后,该局部邮箱被更新,必须再次调用相同的服务发送邮件至同一个邮箱。<br>
|
||||||
|
* 三、用户中断中接收邮件<br>
|
||||||
|
1、当用户在中断中调用iRecvMail(mail, mbox)接收邮件时,其它不同优先级的中断、任务、滴答,均不可再接收这一邮箱中的邮件。也就是说,所有任务和滴答可以接收来自同一个邮箱中的邮件;所有相同优先级的中断可以接收来自同一个邮箱中的邮件。<br>
|
||||||
|
2、当邮箱的数据类型为非原子访问类型时,中断最好不要发送邮件给中断(除非这个中断的发生频率足够低,可确保在PendSV中最终完成发送以后,这个中断才会再次发生),否则会有出错的风险。<br>
|
||||||
|
* 四、用户中断中接收飞信<br>
|
||||||
|
1、当用户在中断中调用iRecvFetion(tbox)接收飞信时,其它不同优先级的中断、任务、滴答,均不可再接收这一信箱中的飞信。也就是说,所有任务和滴答可以接收来自同一个信箱中的飞信;所有相同优先级的中断可以接收来自同一个信箱中的飞信。<br>
|
||||||
|
* 总结<br>
|
||||||
|
1、条件一和条件二其实算不上什么条件,只要注意局部变量和邮箱做为专用就可以了。<br>
|
||||||
|
2、条件三和条件四只需稍加留意即可。<br>
|
||||||
|
|
||||||
## 第三章、线程同步
|
## 第三章、线程同步
|
||||||
|
|
||||||
## 第四章、互斥访问
|
## 第四章、互斥访问
|
||||||
|
|||||||
Reference in New Issue
Block a user