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

使用uC/OS-II操作系统的短信息电话机 03

使用uC/OS-II操作系统的短信息电话机 03

① 下传数据时,将下传的数据放在recv_buf[]中,然后调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)唤醒UI任务。Msg_Any_UI [0]=任务号4,从Msg_Any_UI [1]开始存的是从recv_buf[]中筛选过的数据。这是在连上后从信息中心下载信息的情况,其中Msg_Any_UI [1]存的是信息的种类号,种类号都是大于0x80H小于0xFFH的;没有连上信息中心或者是连上之后完成任务。这时recv_buf[1]存的就是0xff;如果刚刚连上,就在recv_buf[1]存0x01。
  ② 如果用户需要发送短消息任务,先将信息存在Msg_send_buf[]中,然后UI任务调用OSSemPost(Sem_Any_SMTask),将该任务激活。该任务提取存在Msg_send_buf[]中的信息后,包装后保存在send_buf[],然后将其发出去。
  (5)用户界面任务
  UI任务一直在等待消息。当它被激活时,根据存在Msg_Any_UI[255]中的不同数据进行不同的处理。详述见“3.用户界面任务详述”。
  (6)时钟任务
  单片机每10ms产生一个中断,在这个中断服务子程序中,对clock_count减1。当减为0时,就调用OSSemPost(Sem_Int_ClockTask)唤醒时钟任务;同时,clock_count重新回到100。这样每1s,就会调用一次OSSemPost(Sem_Int_ClockTask)。时钟任务调用OSSemPend(Sem_Int_ClockTask,0,&err)获得信号量。当获得信号量时,就更新时间。如果在23:59:59的时候更新时间,那就要同时更新日期和星期。如果此时UI任务处于待机状态,时钟任务就调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒UI任务。Msg_Any_UI[0]为任务号0x06。时钟任务只是负责更新时间,显示时间是由UI任务在待机的时候来完成的。
3 用户界面任务详述
  在所有这些任务中,用户界面任务做的工作相对比较烦琐。首先,根据放在Msg_Any_UI[255]中的第一个字节,判断是什么任务激活了本任务。
  ① 如果是摘/挂机任务激活的,再判断第二个字节的值,根据值的不同知道是挂机还是摘机。如果是挂机,就在液晶上显示待机画面。如果是摘机,就在液晶上显示打电话图标和有关的字样,并等待键盘任务送来的数字键,将其显示出来。(只有主动向外打电话才显示数字键,在接电话按数字键转接时不显示数字键。)
  ② 如果是振铃任务激活的,就将Msg_Any_UI[255]中接下来的来电号码、时间和来电图标显示在液晶上。
  ③ 如果是键盘任务激活的,就根据3号任务放在Msg_Any_UI[255]中的键值和当前的工作模式做不同的处理。
  如果是在摘机模式下,就只是响应数字键和#*键,并每按一个键就通过5号任务号码发出去。
  如果是在挂机模式下,那么,就可以响应数字键和有关操作菜单的键(包括进入各个子菜单的快捷键、上下键、左右键、返回上级菜单键、快速返回待机画面的键、确定键、删除键、拼音输入法/字母输入法/数字输入法/短语输入法切换键)。各个菜单是不同的状态,通过键值和原来的状态可以知道现在该进入什么状态。然后根据新得到的状态,进行相应的液晶刷新和完成相应的功能。比如添加、删除、查找电话簿;添加、删除、查找通话记录;编辑短消息并发送出去,删除草稿箱里的短消息;写记事本,设置闹钟、时间、日期,设置信箱的密码,设置信息中心的号码等。
如果是在与信息中心的连接模式下,那么就可以响应上下键,确定键(进入下级菜单),返回上一级菜单,通过选择返回这个选项来实现。
  ④如果是短消息任务激活的,就根据Msg_ Any_UI[255]中的命令码,来确定该信息的模块种类是信息下载管理模块、信息上传管理模块、信息询问管理模块,或者是屏幕信息输出管理模块,然后,再根据Msg_Any_UI[255]中接下来的信息做相应的处理。
  ⑤ 如果是时钟任务激活的,UI任务就刷新界面上的时间、日期和星期这些信息。
4 调试环境与调试成果
  此程序用EPSON公司的S1C88 C-Compiler编译器编译,用EPSON公司的ICE88UR 的E0C88系列在线仿真器进行仿真。在仿真器下仿真完毕后,再脱机运行。试验结果令人满意,达到了预期的效果。
返回列表