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

基于μC/OS-II接入网接口的研究与设计 03

基于μC/OS-II接入网接口的研究与设计 03

考虑到这种特殊的运作方式,任务的实现可以以下列方式来运行。

        OSMboxCreatE( ...);/*在任务初始化时,为该任务创建一个邮箱,用来接收其他任务发送来的消息。*/
        for( ;;)
        { bytE statE,stim ,act;
        Check Timer Expired();/*检查TIMER是否timEout*/
        OSMboxPend();/*从该任务的邮箱中接受收到的新邮件消息*/
        statE= Get Entity ();/*从邮件消息中获取消息实体,得到该消息是发给此协议的那一个实体的,并得到该实体的状态。例如,PSTN协议,则要获取此消息是发给PSTN协议的那个端口*/
        stim = Get Stim();/*从邮件消息中获取用于FSM 的激励消息*/
        act= Do FSM(statE,stim);/*根据前面获取的状态和激励消息,得到需要做的动作和下一个状态.*/
        DoAct(act);/*完成由FSM 指定的工作,并转移该实体的状态.*/
        OSMboxPost();/*根据需要发送消息通知其他协议任务*/
        }

  各个协议的FSM 方式运作实现都可按上面的框架来完成。
  借助于μC/OS-II系统API函数OSMboxPend,可以从邮箱中收取邮件。当邮箱中有新的邮件时,该函数返回指针指向新的邮件。若没有新邮件,该函数将挂起当前任务,把CPU时间让给其他任务使用。在DoAct函数的处理中,用系统的API函数OSMboxPost发送邮件给其他任务的邮箱。
  定时器的实现
  每个任务有一个timer链表保存该任务使用的所有定时器。定时器链表具有以下的数据结构
          structv5_timer
        {
        bytE timerid;/*标示每个TIMER*/
        unsigned long period;/*标示定时器的timeout时长*/
        bytE timer typE;/*标示定时器的类型*/
        unsignedlong starttimE;/*标示定时器启动的系统时间*/
        bytE t_flag ;/*保留用的标记*/
        }
  要设定一个定时器只需新添加一个TIMER到链表中。调用系统APIOSTimeGet()获取目前系统时间作为定期器的启动时间填入定时器结构体的starttimE成员中,给period赋值指定定时器时长。任务循环的开始部分在接收邮件消息前,将检查链表,通过比较每个TIMER的starttime和目前系统时间的差值来判断定时器是否到期,如果有定时器到期则插入一条TIMEOUT消息到本任务的邮箱。
  结束语
  V5接口在通信网络中有着广泛的应用,笔者探讨了在开放源码的μC/OS操作系统上如何实现V5接口,提出了V5接口的软件实现框架和具体设计方案。在商业应用上可大大降低开发成本,对开发嵌入式操作系统的技术人员能有所帮助。
返回列表