基于μC/OS-II实时操作系统实现V5接口电路的设计

引 言
随着接入网(an)范围内多种传输媒介、多种接入配置和业务发展的需要,itu制定了v5.1接口的g.964建议和v5.2接口的g.965建议。这些标准的制定使得交换机可以通过此接口支持多种类型的用户接入,其开放性使得交换机和接入网的技术和业务完全独立开来。接入网的发展可以不受交换机的限制,使得接入网市场完全开放。根据速率不同,v5接口分为v5.1和v5.2接口。
v5通信接口协议
v5.1接口由单个2048kbit/s链路构成,用于支持模拟电话接入以及基于64kbit/s的综合业务数字网(isdn)基本接入和用于半永久连接的、不加带外信令信息的其他模拟接入或数字接入。
v5.2接口按需要可以由1~16个2048kbit/s链路构成,除了支持v5.1接口提供的接入类型外,还可支持isdn一次群速率接入。v5.2接口由以下3层组成:第一层,物理层,由1~16个符合itu的g.703和g.732建议的2mbit/s的数据链路构成。第二层,数据链路层,仅对c通路而言,使用的规程称为lapv5,其目的是为了允许灵活地将不同的信息流复用到c通路上去。它又可进一步分为两个子层,即数据包封装功能子层(lapv5-ef)和数据链路子层(lapv5-dl)。lapv5-dl子层完成对v5.2协议第三层消息的复用。lapv5-ef 子层通过映射完成对lapv5-dl帧和isdnd通路信息的复用。第三层,协议层,包括pstn协议、公共控制协议、链路控制协议、bcc协议和保护协议。pstn协议负责处理与pstn业务相关的信令;公共控制协议负责协调两端用户端口状态同步及数据指配;链路控制协议负责协调和实现两端链路相关的控制;bcc协议负责an和le,协调完成2mbit/s链路上的承载通路分配;保护协议在链路出现故障时提供通路的切换保护功能。第一层有限状态机协议如图1所示。
μc/os-ii实时多任务嵌入式系统
v5接口实现中包括5个核心协议的处理和管理许多定时器,所以对操作系统要求很高。笔者选用μc/os-ii作为其操作系统,实现多任务管理及任务间通信等。μc/os-ii最多支持56个任务,任务调度采用优先级抢占调度算法,总是执行就绪态的优先级最高的任务,并支持semaphore( 信号量)、mailbox ( 邮箱)messagequeue(消息队列)等多种常用的进程间通信机制。由于系统中代码大多是用c语言写的,有比较好的可移植性。
系统启动
μc/os中,多任务内核通过调用osinit函数开始执行内核相关的初始化。osinit函数将完成任务控块、事件控制块、消息队列和内存管理的初始化等。系统初始化完成后需调用os-start函数启动嵌入式内核,开始多任务运行。在启动多任务内核前需要至少启动一个任务。
多任务创建
在μ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的消息数据封装打包并转发出去。
管理模块
此模块主要完成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发送邮件给其他任务的邮箱。
定时器的实现
每个任务有一个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接口的软件实现框架和具体设计方案。在商业应用上可大大降低开发成本,对开发嵌入式操作系统的技术人员能有所帮助。


烫光机轴头磨损原因及修复方法
AI赋能的智能支付流程
从MAXQ8913微控制器上的RAM执行应用代码
陌生人敲门 透过斑点猫智能猫眼再决定开门
浅谈模拟公共接口的输入-输出
基于μC/OS-II实时操作系统实现V5接口电路的设计
外媒:一款三星中端手机规格在GFXBench跑分平台曝光
简述FPGA在广播视频的应用
荣耀note9什么时候上市?荣耀note9最新消息:全面屏+高颜值,不输华为mate10
英特尔18A重回工艺领先地位?台积电:没可能
SDWAN可以为跨境电商做什么?
Dialog半导体宣布推出最新的可配置混合信号IC产品SLG51000 将成为高端相机和传感器系统的理想电源选择
关于图像采集器件的原理和供电方法的分析和介绍
格林美已签署30多万吨三元前驱体战略长单
通过PCB设计检测简化开发流程
Python无人机阵列干扰天线自动化设计
LGD与三星电子建立供货关系 寡头博弈持续演进
结构化布线-各子系统的设计分享
MCU省电模式帮助降低整体功耗
一文解读华为2018年财报:消费者业务突飞猛进 超运营商业务