ucos-II消息队列处理多按键_--_适合初学者
更新时间:2024-05-23 08:53:01 阅读量: 综合文库 文档下载
- ucos 消息队列推荐度:
- 相关推荐
2011-08-24 17:36
ucos-II消息队列处理多按键
上一次采用信号量的方式处理一个按键,采用发送和等待信号量的方式来实现该按键的扫描。但是如果系统有多个按键需要处理呢?是否还可以用信号量呢?当然其实也可以的,多个按键就创建对个信号量呗!这样处理可是可以,不过很繁琐。本文介绍另外一种处理方案:采用消息队列的方式。将每一个按键对应一条消息,当某个按键按下时,就发送该按键的消息到消息队列:OSQPost(KeyQEvent, Qmsg_KA);然后在按键处理任务重一直调用q_keymsg =
(INT8U*)OSQPend(KeyQEvent,10,&err);读取消息队列,也就是判断该函数的返回值是否是按键消息Qmsg_KA,如果是则相应,如果不是则延时任务。 /*消息队列相关变量定义初始化
-------------------------------------------------*/
OS_EVENT *KeyQEvent; /*定义消息队列的事件控制块,用于接收消息队列返回值,如果消息队列
创建成功,则返回一个指针,这个指针用于以后对消息队列的操作
因此,该指针可以看做是相应消息队列的句柄。
QEvent = OSQCreate(&Qstart[0],10); */
INT8U err; /*定义消息队列的错误变量 OSQPend(QEvent,2000,&err);接收消息等待错误*/
void *Qstart[10]; /*定义消息队列的指针数组,可容纳10则消息*/ INT8U *Qmsg_KA = \定义一则消息,*/ INT8U *Qmsg_KB = \定义一则消息,*/
KeyQEvent = OSQCreate(&Qstart[0],10); /* 创建一个消息队列,可容纳10则消息*/
void TaskKeyScan(void * pdata)/*按键扫描任务*/ {
INT8U KeyAState; INT8U KeyBState;
INT8U keyA_release = 0; INT8U keyB_release = 0;
pdata = pdata; for(;;) {
OSTimeDlyHMSM(0,0,0,50);
KeyAState = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13); /* 按键按下返回 0 */
KeyBState = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2); /* 按键按下返回 1 */
/*按键KEYA有效--------------------*/ if (KeyAState == 0) {
OSTimeDlyHMSM(0,0,0,20);/*20ms去抖动*/
KeyAState = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13); if (KeyAState == 0) {
keyA_release = 1; } }
if (KeyAState == 1 && keyA_release == 1) /* 本次按键有效 */ {
OSQPost(KeyQEvent, Qmsg_KA); /*发送按键KEYA被按下消息*/ keyA_release = 0; /* 按键释放标识清除 */ printf( \ }
/*按键KEYB有效---------------------*/ if (KeyBState == 1) {
OSTimeDlyHMSM(0,0,0,20);
KeyBState = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2); if (KeyBState == 1) {
keyB_release = 1; } }
if (KeyBState == 0 && keyB_release == 1) /* 本次按键有效 */ {
OSQPost(KeyQEvent, Qmsg_KB);/*发送按键KEYB被按下消息*/ keyB_release = 0; /* 按键释放标识清除 */ printf( \ }
} }
void TaskLed(void * pdata)/* 按键相应任务*/ {
INT8U *q_keymsg; pdata = pdata;
for(;;) {
q_keymsg = (INT8U*)OSQPend(KeyQEvent,10,&err);/*扫描消息队列*/ if(err == OS_NO_ERR) {
if(q_keymsg == Qmsg_KB)/*如果按键B被按键,则相应相关处理函数*/ {
LED4_TOGGLE(); Num ++; }
else if(q_keymsg == Qmsg_KA) /*如果按键A被按键*/ {
LED4_TOGGLE(); Num --; } } } }
正在阅读:
ucos-II消息队列处理多按键_--_适合初学者05-23
公司部门经理2023年度个人述职报告范文03-22
全面加强企业文化建设-不断提升车务段进展软实力和安全保障力04-18
循环球式转向器设计 - 图文05-27
中考作文专题训练之八06-06
金鱼的故事02-06
四年级语文秋季课程第二课时09-09
高层建筑灭火救援预案10-22
新年致辞(优秀8篇)03-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 队列
- 初学者
- 按键
- 适合
- 消息
- 处理
- ucos
- II
- 2015-2019年XX机动车检测公司战略规划报告精选审批篇 - 图文
- 河北省涿州市东仙坡中学七年级英语下学期第二次阶段考试试题(无
- 恩施最全民俗文化 - 图文
- 陈辉《蚂蚁和蝈蝈》课堂教学设计
- 岳池中学2018-2019学年度上期第一次月考高三第一次月考英语
- 电气设备岗位练兵试题
- 重大危险源控制目标
- 供电所电能计量装置异常处理及电量退补管理办法
- 2018-2023年中国换热设备行业市场供需现状调研与发展商机分析研
- 中建x局(投标书)定稿版
- (人教版)小升初入学考试数学试卷及答案
- 家装油漆120
- 深圳证券交易所独立董事备案办法
- 煤矿企业安全生产管理人员二级培训煤矿安全生产方针及相关法律法
- 2008年度浙江省自然科学基金申请指南
- 基于单片机的指纹识别电子密码锁的毕业设计
- 2019-2020学年九年级历史上册 第10课 资本主义时代的曙光同步练
- 最新精编2016新陕旅版四年级英语下册期中试卷
- 2018-2024年锁线装订机行业市场供需分析及发展预测报告(目录)
- 社会实践 - 图文