RTOS学习笔记,八、队列集

发布时间:2026/6/6 4:06:40

RTOS学习笔记,八、队列集 输入设备比如红外遥控器它们的驱动程序应该只传递键值而不应该在程序里涉及按键控制的代码。比如红外遥控器驱动程序里它只应该把键值记录下来、写入某个队列它不应该把键值转换为游戏的控制键。这样这个驱动程序就可以在其他工程里继续直接复用一般情况下就不要修改。队列集问题1此时红外遥控器产生的队列再写输出端的队列控制输出端的任务虽然这种办法确实能将两边的代码分开按键代码专注于读取按键游戏代码专注于控制游戏但我们想要多个设备来控制游戏时比如用旋转编码器用MPU6050姿态控制时一个任务就要生成一个队列 每个任务生成一个栈会消耗很多内存浪费资源。改进1此时只创建一个input task任务读取下面三个队列然后再写输出端的队列问题2此时input task轮流读取三个队列有数据的话就处理。此时三个任务超时时间只能给0假设接收第一个队列超时时间给30分钟当第一个队列三十分钟内都没发数据那其他任务就算有数据也只能等三十分钟才能继续接收。那么这就导致这个任务不断地运行一直都没有阻塞浪费CPU资源改进2使用队列集队列集也是队列但里面放的是队列的句柄。例子1.创建队列AB2.创建队列集S3.将队列A,B加入队列集S4.在input task任务中不断读队列集S写队列A的时候会判断一下队列A是不是属于一个队列集属于时写队列A时会顺便把A的句柄写入队列集S。同样写队列B会把队列B的句柄写入队列集S。在input task读队列集可以得到一个句柄返回的句柄非空时就可以去读这个句柄程序框图思路此时完整框图如下

相关新闻