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

基于μC/OS-II接入网接口设计方案(2)

基于μC/OS-II接入网接口设计方案(2)

多任务创建
  在μC/OS中,每个任务都是无限循环的,每个任务都处在以下5种状态之一:休眠态、就绪态、运行态、挂起态和中断态。μC/OS中通过调用OSTaskCreatE或OSTaskCreateExt函数创建启动任务。对于每个任务都有惟一的1个优先级标识。

  任务间同步和通信

  在μC/OS中,提供了消息队列、邮箱和信号量等机制用以实现任务间同步和通信。邮箱可以用来通知一个事件的发生(发送一条信息)。在源端的任务通过调用OSMBoxPost函数向邮箱写,在目的端的任务通过调用OSMBoxPend函数从邮箱读。当邮箱为空时调用OSMBoxPend函数的任务将被挂起。信号量是一种约定机制:两个或多个任务通过简单的信号进行合作,一个任务可以被迫在某一位置停止,直到它接收到一个特定的信号。信号量主要实施3种操作:一个信号量可以初始化为非负数;等待操作使信号量减1,如果值变成负数,则执行等待的任务被阻塞;得到CPU使用权的任务signaL操作使信号量加1,如果值不是正数,则被等待操作阻塞的任务解除阻塞。

  函数的可重入性

  可重入函数是指一个可以同时被多个任务调用而不会发生数据冲突的函数。在多任务环境下,所有可能被多个任务同时调用的函数都必须保证其具有可重入性,此函数可以通过使用局部变量来保证其可重入性。

  V5系统设计

  V5接口协议的3层中物理层和数据链路层部分功能由硬件实现。物理层可用PMC公司生产的大规模E1接口芯片PMC4354,它是一种可提供4路E1的接口芯片并综合了成帧器和LIU,其重要特性包括数据链路接入、报警、中断、环回和诊断。处理器选用SUMSUNG 公司的KS32C50100,它内置2个HDLC控制器,2个定时器。特别适用在V5接口(封装功能子层功能和HDLC协议类似),V5协议的第三层实现全部基于嵌入式系统编程。

  软件实现框架

  对于V5接口的5个核心协议中的每个协议都作为一个任务来实现和管理。任务间的消息采用邮件的方式。

  软件实现框架包括3个模块,如图2所示。

  OS系统模块

  此模块由μC/OS-II实现系统功能,包括多任务调度、管理内存分配、任务间通信和定时器。

  协议实现模块

  块主要实现了V5接口的5个核心协议、第1层有限状态机协议和LAPV5协议。每个协议作为一个单独的任务运行。由于V5接口在运作过程中通话建立和拆除主要由PSTN协议和BCC协议完成,所以这2个任务需要有较高的优先级。LAPV5任务将来自上层需要发送给LE的消息数据封装打包并转发出去。






  图2 软件实现架构

  管理模块

  此模块主要完成AN的管理相关任务。其中包括PSTN端口的状态管理,V5界面管理,E1链路上承载时隙资源管理和5个核心协议C-PATH的管理。状态管理完成链路和端口的状态管理,界面管理用来获取V5接口的设定并完成V5接口的启动和保护切换。另外,V5接口通过界面管理任务接受来自控制台或网管系统的维护命令,随时向上层网管报告V5接口目前的状况。C-PATH管理用来建立和维护各个C通路。

  接口的具体设计

  V5接口协议中每个协议的处理流程按FSM(FinitEStatEMachine)的方式来完成。FSM 是具有马尔可夫性的,其目前状态仅与前一次的状态有关,与其他历史状态无关。它由有限的状态和相互之间的转移构成,在任何时候只能处于给定数目的状态中的一个。当接收到一个输入事件时,状态机产生一个输出,同时也可能伴随着状态的转移,其特点是根据目前的消息和目前的状态决定要做的事和以后的状态。

  每个任务用一个结构体数组来维护其各个实体的状态和其他相关的信息。

  例如PSTN协议可以用如下类似的结构体数组

  struct PSTNPORT{

  bytE interfaceid;/*保存该PSNT端口实体所属的V5接口ID*/

  unsigned intle portid;/*保存该PSTN端口实体所对应的LE端PSTN实体ID*/

  bytE statE;/*该实体的状态*/

  TIMER t1;/*保存该实体的t1,t2,t3,tr,tt定时器值*/

  TIMER t2;

  TIMER t3;

  TIMER tr;

  TIMER tt;

  }

  每次完成由FSM 产生的动作时更新该数组,保存该实体相关的新的信息。V5接口中5个主要协议都是以FSM 的方式来运行的。协议根据目前的状态和收到的激励消息在FSM 中找到需要做的动作并完成响应。

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

  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发送邮件给其他任务的邮箱。
继承事业,薪火相传
返回列表