基于SDL的通信协议开发平台
l 引 言
SDL是一种用来说明和描述系统的国际通用的标准化语言。它将直观的图形和固定的格式结合起来,使开发人员可以简洁高效地将规范和协议描述出来,SDL的应用,可以缩短开发周期,降低系统的差错率,提高软件质量。现在越来越多的电信设备开发商开始使用SDL进行协议软件开发。
但SDL并非编程语言,用SDL描述系统以后最终需要将SDL系统映射成实际程序才有意义,而目前一般是借助于国外的一些开发工具如SDT提供的SDL和C语言的转换工具来完成,开发人员通过编写SDL系统和环境的接口函数来实现所生成的代码和RTOS的集成。这种方法提高了协议开发的效率,但也有一些缺点:设计依赖于工具,脱离工具则代码难以维护、SDL生成的代码非常复杂,不便于修改和阅读,所以在实际应用中这些工具往往用于协议验证。
为了提高协议开发效率,我们在无线通信系统开发中建立一套自主的基于SDL的通信协议开发平台,通过这个平台可以实现SDL基本元素进程以及进程之间的通信和RTOS任务之间的通信,并集成了协议中常用的定时器管理功能、内存管理功能。
2 SDL介绍
SDL(Specification and Description Language)是1976年至1992年由ITU―T发展和标准化的一种描述系统行为的语言,SDL的数学模型是扩展有限状态机(EFSM),是一种高层泛用型的用于事件驱动、实时和通信系统的描述语言,电信系统和协议是它主要应用领域之一。SDL有图形和文本两种表示形式,SDL/GR和SDL/PR。它既可以用来对系统的功能进行说明,也可以描述系统的内部结构和行为,因而应用范围很广,可以用于协议工程的各个阶段。SDL采用一种层次结构来对系统进行描述和说明,结构和功能被清楚地划分。系统可以分为多个功能块,功能块表示系统内部功能相对独立的几个模块,它们之间通过信道相连。根据系统规模的大小,每个功能块还可以分为子功能块或进程。与传统FSM类似,SDL进程具有有限数量的被有限数量跃迁连接着的宏控制状态。通过一个输入信号(也可称使能条件)的接收、事先设置的定时器的定时或当前状态变量(连续信号)值所指定条件的确认,跃迁能够被触发。在SDL中,定义了一些基本的数据类型和操作,以及构造新类型的机制,使得SDL拥有和C/C++语言一样的数据操作能力,因此它可以用于系统的设计和实现。
3 SDL通信协议开发平台构成和实现
SDL通信协议开发平台建立在嵌入式实时操作系统上,主要包括4个模块:进程管理、消息管理、定时器管理、缓存管理,如图1所示。其中进程管理模块提供了SDL进程的创建、删除等库函数,并提供了SDL功能块和进程的描述表,通过这张表格可以确定任务块和进程的从属关系。在消息管理模块提供了进程间、进程和功能块间、进程和外部任务间的消息通信函数;定时器管理和缓冲管理模块则提供了定时器的创建、删除函数以及缓冲的创建和释放函数。
3.1 功能块和进程的实现
3.1.1 功能块实现
采用SDL描述的系统包含若干个功能块(block),每个功能块内至少有一个进程(process),功能块是用RTOS的任务直接实现的不需要开发者单独创建,只需在功能块中预先定义包含哪些进程,SDL系统在初始化时直接可以创建功能块。每个功能块内进程的并发调度是由功能块的一个调度函数实现,而功能块之间的调度则由操作系统完成。功能块任务内除了完成个进程状态机的轮询调度外,还负责接收外部环境的消息并分发消息到各个进程状态机中;除此外功能块任务还负责本功能块内所有进程的定时器管理工作。功能块内部工作流程图如图2所示。
3.1.2 进程状态机的实现
进程是并行执行的扩展的有限状态机,它规定一个系统的动态行为,进程基本上是处于等待信号的状态,收到信号则立刻进行状态之间的转移,进程的这一概念非常类似于操作系统中进程或者任务的概念。进程之间,进程与系统环境之间通过异步信号进行通信,这些信号可携带不同类型的参数。虽然进程的特点和RTOS中任务有点相似,但实际开发中一个SDL的进程会同时存在上百个甚至上千个,这显然不能用任务去直接实现SDL进程。
在SDL平台上采用一个C函数对应一个SDL的进程,该进程所在的功能块负责调度该进程的运行。在SDL语言中进程可以看作是一个有限状态机,状态机的状态跃迁是由一系列信号触发的,在进程的入口函数采用swicht―case架构的实现状态机。在平台规定了一个标准的进程状态机函数模板,协议开发中每个进程按照这个模板编写SDL进程的代码。
3.1.3 进程并发性的实现
进程并发性是通过在功能块任务内的进程调度函数实现的,在调度函数内按照消息的触发次序轮流调用进程的状态机函数。在实际应用中还会碰到一个状态机函数,需要并发调用的情况,比如在WiMAX系统中每个用户站入网过程都是一样的,包含下行同步参数获取、上行参数获取、初始测距、能力协商、注册等状态跃迁过程,所以对基站来说只要一个进程状态机就可以完成一个用户站的入网接入过程,但对基站来说又需要同时接人多个用户,这就需要进程状态机函数允许被重用,就像面向对象就是类和对象的关系,我们把这种需要被重用的进程称做进程类型,而每个实际使用的进程称作进程实例,在协议开发过程中开发者调用平台提供接口函数就可以创建一个或者多个进程实例。在程序中要实现状态机函数的重用就需要解决函数的重入问题,我们采用在每个状态机函数中保留一个私有存储区方法解决函数重人过程中私有变量的保存问题,如图3所示。
开发平台 协议 通信 SDL 基于 通信协议 进程 状态机 相关文章:
- 基于RFID的物联网开发平台构建[图](03-23)
- 基于RFID的物联网开发平台构建(03-22)
- PLC、FCS、DCS三大控制系统区别(07-07)
- 从4G到V2V 车联网还需要哪些通信协议?(07-02)
- 用SoC设计简化可穿戴设备的开发(07-24)
- 详谈如何解决物联网应用难题(07-20)