201108241736ucosII消息队列处理多按键上一次采用信号量的方式处理一个按键,采用发送和等待信号量的方式来实现该按键的扫描。但是如果系统有多个按键需要处理呢?是否还可以用信号量呢?当然其实也可以的,多个按键就创建对个信号量呗!这样处理可是可以,不过很繁琐。本文介绍另外一种处理方案:采用消息队列的方式。将每一个按键对应一条消息,当某个按键按下时,就发送该按键的消息到消息队列:OSQPostKeyQEve
tQmsg_KA然后在按键处理任务重一直调用q_keymsgINT8UOSQPe
dKeyQEve
t10err读取消息队列,也就是判断该函数的返回值是否是按键消息Qmsg_KA,如果是则相应,如果不是则延时任务。消息队列相关变量定义初始化OS_EVENTKeyQEve
t定义消息队列的事件控制块,用于接收消息队列返回值,如果消息队列创建成功,则返回一个指针,这个指针用于以后对消息队列的操作因此,该指针可以看做是相应消息队列的句柄。QEve
tOSQCreateQstart010INT8Uerr定义消息队列的错误变量OSQPe
dQEve
t2000err接收消息等待错误voidQstart10定义消息队列的指针数组,可容纳10则消息INT8UQmsg_KA