首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于RTX51实时操作系统的用户专用键盘软件设计 03

基于RTX51实时操作系统的用户专用键盘软件设计 03

程序中,采用等待超时信号(K_TMO)来实现两次扫描间的延时,这样设计的好处是,在延时期间,由于本任务处于“等待”状态,系统可以进行任务切换,使其它任务继续执行,从而在保证系统功能的前提下,提高整个系统的工作效率。需要注意的是,K_TMO是等待产生超时信号,当信号产生后,只是将相应的任务置上“准备好”标志位,任务并不是立即就能够运行,任务需要等到其它任务轮流执行,到自己的时间片后才会执行。这样,最后的延时效果是延时时间加上正在运行的任务的执行时间。在用户专用键盘软件中,同时可能在运行的任务只有“串口数据处理”。由于该任务运行时间与K TMO延时时间比较少很多,因此可以忽略不计,而认为两次扫描间的延时时间就是K_TMO的时间。假设同时运行的任务较多,并且每个任务占用的时间较长,则延时时间应该取K_TMO加上所有同时运行任务的执行时间之和,即按键按下的时间必须不小于此时间,才能保证每次按键操作都能正确响应。
  3.5 按键码值查询任务(TASK KEY)
  按键码值查询任务程序流程如图5所示。

   
  由于发送数据在串口中断服务程序中完成,因此,在将数据存入发送缓冲区之前必须确认缓冲区中有数据即串口发送中断会被再次触发,否则只有将数据写入串口发送缓存器SBUF直接发送。
  下面给出按键码值查询任务简化的源程序:
  Encode()_task_KEY{
  …
  While(1){
  Os_wait(K_SIG,0,0);/*等待键码查询信号*/
  Keygetcode();/*获取键码值*/
  If(sendempty=1){/*判断发送缓冲区是否为“空”*/
  SBUF=keycode;/*发送缓冲区为”空”,则直接发送*/
  }Else{
  Outbuf[i++]=keycode;/*否则,将数据存入缓冲区,*/
  /*待上一数据发送完后自动发送*/
  }
  }
  }
  4 结论
  实践证明,在引入RTX51 Tiny实时操作系统后,软件开发周期缩短,程序结构更加清晰,系统实时性和并行性大大增强,开发出的程序具有较高的可维护性和可移植性。
返回列表