原创 【SmallRTOS+Proteus仿真】EX4 - 按键扫描任务及消息队列使用

2008-3-27 15:48 3432 8 8 分类: MCU/ 嵌入式

    
    RTOS的消息机制是任务之间传递信息的重要手段,我们来仿真试验一下SmallRTOS的消息传递。
   
    我们建立两个任务:
   
    任务B: 扫描按键,经过去抖动、等待按键松开,取得键值后向任务B发送消息,这里简单地把键值直接作为消息值发送。
 
 任务A: 等待任务B发来消息,收到的以后消息, 把按键序号和键值显示出来
 
 按键按下时,LED D7会闪一下,表示按键事件已经检测到,可以松开按键,按键松开以后才认为有效。


 程序其实很简单,这里不多述,直接看源码吧。下载后解压到EX4目录。点击下载
 
 使用消息前,os_cfg.h中要做相应的设置:
 
 #define EN_OS_Q                 1           /* 禁止(0)或允许(1)消息队列                                 */
 #define EN_OS_Q_CHK             0           /* 禁止(0)或允许(1)校验消息队列指针                         */
 #define OS_Q_MEM_SEL            idata       /* 消息队列存储空间选择,keil c51有用,必须为idata、xdata   */
                                             /* 不是keil c51时它必须为空格                               */
 #define EN_OS_Q_PENT            1           /* 禁止(0)或允许(1)等待队列中的消息                         */
 #define EN_OS_Q_ACCEPT          0           /* 禁止(0)或允许(1)无等待的从队列中取得消息                 */
 #define EN_OS_Q_POST            1           /* 禁止(0)或允许(1)FIFO方式向对列发送消息  
 
这里采用的消息队列有16个字节的长度,实际上有缓冲输入的功能。因为接收消息的任务处理时间比较快,消息队列中基本上只有一个消息,看不到消息队列排队的情况。


为了在实验中看到消息队列排队现象,在任务A中做了一个较长的延时,模拟消息处理慢的情形。仿真中,可以看到按下按键以后,显示比较迟钝(延时的原因),而所有按键会陆续显示出来(排队处理)。


另外,电路图修改了一个原来的错误:
 修改2*4键盘连线(原来P24那条线漏接了)


点击开大图


 


 


 
 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条