1826_ChibiOS的OSLIB中的二值信号量
全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)
1. 二值信号其实是信号量的一种特殊应用,为了保证高效,实现上都是采用计数信号量的内联设计实现的。
2. 与常规的二值信号相比,ChibiOS实现的二值信号进行了一些扩展功能。主要是复位、超时以及发消息。这些扩展的功能其实也是继承自计数信号。
从接口的处理功能来看,可用的场景还是很多的。
这个是代码使用的一个例子,比如说在中断中收到信号之后通过二值信号通知线程来处理。而这里的这部分实现,是完成了这个信号的通知部分。
1. 在对应的线程之中,首先做的是一个等待信号的操作。
2. 如果等待出现了超时,可以进行超时的处理。
1. 如果等待没有超时的时候等来了信号消息,那么获取中断的处理数据在这个线程之中处理。
2. main函数中给出来了二值信号的初始化。
1. 初始化之后进行了任务的创建。
2. 从提示信息看,这种场景之下使用计数信号量是不合适的。主要的问题点是计数信号量会一直增加,如果是线程处理的速度慢,很可能会出现计数信号超出最大限值溢出的情况。从这个描述看,其实设计良好的系统其实使用计数信号问题也不大。而从另一个溢出保护的角度来看,很可能二值信号在实现的时候可能加了OS中的wait操作。
以上的这些内容就是ChibiOS中的二值信号的一个简单的介绍,从这里其实能够看出来一个比较有意思的点:二值信号的值其实不仅是2个,只是最大数值限制在了1,而0和1正好是获取到以及没有获取到两个特殊的状态。而在这几个数值之外,其实还有一系列的复数用来代表排队的请求。这样,也就出现了二值信号的数值其实还有一个扩充的负数范围的情况。