利用TAUG2开发协议栈方法简介主要内容•TAUG2软件介绍•UML和SDL语言概要•TAUG2软件开发协议栈的步骤•TAUG2开发与用C语言进行嵌入式开发的优劣比较什么是TAUG2?•Telelogic公司的TauG2软件是基于UML、SDL等图形描述语言的、用于分析、设计、运行和测试实时系统的工具。•TauG2的特点在于实时语言SDL和MSC的形式化,能够帮助用户在设计初期就使用仿真,对设计进行确认和验证,保证系统的每一个细节运行正确。•如果用户的流程设计没有问题,TAUG2的代码生成器可将其编译成可执行代码,还可将错误数量降至最低。此外,TelelogicTau还提供了自动测试套的生成功能,协助用户进行仿真测试。•由于种种原因,TAUG2软件尚未流行,不成熟的地方还很多,甚至市面上很少有介绍其使用和开发的书籍。TAUG2的界面什么是UML和SDL语言?•UML(UnifiedModelingLanguage),称为统一建模语言,是一种标准的图形化建模语言。典型的UML图有类图、对象图和用例图等等。•SDL(SpecificationandDescriptionLanguage),称为规范说明和描述语言,是一种应用较广的形式化描述语言。它主要应用于电信领域,也是用于描述活性(即对外来信号是有反应的)系统。•二者的区别:UML语言主要用于建立类、信号、对象等静态的关系图,而SDL主要用于描述系统的行为和工作流程。类图和对象图类图是用类和他们之间的关系描述系统的一种图示,是建立其他图的基础。对象图则表示在某一时刻类的具体实例和这些实例之间的具体连接关系。在UML中类图和对象图的概念完全一致。表示法名称功能类类是对一类具有相同属性和行为的实体或事物的描述,用于声明变量和实例化对象。对象对象是类的一个实例。关联用于表示类之间的联系关系。复合聚合类之间的关联关系为整体与部分共存。泛化描述用例之间的一般和特殊关系。依赖描述类之间的依赖关系。一个类修改,会影响到另一个类。包一种分组机制。对象1-结束31-结束4*包1informalCustomerSDL状态图(1)表示法名称功能起始符(Startsymbol)状态图的入口。状态(Statesymbol)描述系统某一时刻所处的状态。输入信号(Inputsymbol)表示系统接收到的一个信号。输出信号(Outputsymbol)表示系统发出的一个信号。存储状态(Savesymbol)系统保留一次指定的信号。任务框(Tasksymbol)在该框中可以编写一些文字代码。IdleTea()FillWater()*NbrOfCoffee=0;NbrOfTea=0;Add.Milk=true;Add.Sugar=1;NoAdd=Add;表示法名称功能判断符(Decisionsymbol)类似于if语句。判断条件(Decisionanswersymbol)类似于if中的条件。门限条件(Guardsymbol)只有符合了该条件,状态机才会运行。跳点(Junctionsymbol)类似于C语言中的goto语句。停止符(Stopsymbol)终止该对象的活动。返回符(Returnsymbol)过程结束时,返回到主状态图的符号。类似于C中的return语句。Value5i10DL5SDL状态图(2)TAUG2开发协议栈的方法(1)(以LLC开发为例)•Ⅰ.搭建工程、框架以及公共部分开发•Ⅱ.模块内部的开发•Ⅲ.编译工程、设计测试用例并进行流程测试(相当于“离线测试”)TAUG2开发协议栈的方法(2)(以LLC开发为例)•Ⅳ.模块间联调•Ⅴ.用Vxworks编译出版本,在板卡上调试(相当于预集成测试)•……1.创建新工程2.建立类关系LLC::Logical_Link_Management::Logical_Link_Management::Acknowledged_Advanced_Link::Acknowledged_Advanced_Link::Unacknowledged_Advanced_Link::Unacknowledged_Advanced_Link::Formatter_Management::Formatter_ManagementLogical_Link_ManagementFormatter_ManagementAcknowledged_Advanced_LinkUnacknowledged_Advanced_Link::Basic_Link::Basic_LinkBasic_Link::LLC::Logical_Link_Managementaccess::Basic_Linkaccess::Acknowledged_Advanced_Linkaccess::Unacknowledged_Advanced_Linkaccess::Formatter_Managementaccess::LLC_Definitionaccessaccessaccessaccessaccessaccess3.定义接口关系TLA_GateTLB_GateTLC_GateTMA_GateTMC_GateTMB_GateLogical_Link_Management:Logical_Link_ManagementTLC_GateTLB_GateTLA_GateBL_GateALA_GateALU_GateFM_GateTMC_GateBasic_Link:Basic_LinkLLM_GateFM_GateAcknowledged_Advanced_Link:Acknowledged_Advanced_LinkLLM_GateFM_GateUnacknowledged_Advanced_Link:Unacknowledged_Advanced_LinkLLM_GateFM_GateFormatter_Management:Formatter_ManagementALU_GateALA_GateBL_GateLLM_GateTMB_GateTMA_GateTLA_LLM_ChannelTLB_LLM_ChannelTLC_LLM_ChannelLLM_BLM_ChannelLLM_AALM_ChannelLLM_UALM_ChannelBLM_FM_ChannelAALM_FM_ChannelUALM_FM_ChannelLLM_FM_ChannelFM_TMAFM_TMBLLM_TMC_Channel4.定义公共变量classTL_BL_DATA_REQ_Type{publicAddress_type_TypeAddress_type;publicIntegerMain_address;publicIntegerEndpoint_identifier;//CpublicIntegerTL_SDU_length;publicIntegerPDU_priority;publicBitStringScrambling_code;publicBitStringTL_SDU;publicBitStringSubscriber_class;publicStealing_permission_TypeStealing_permission;publicBooleanFCS_flag;publicBooleanEncryption_air_interface;publicBooleanStealing_repeats_flag;//CpublicpartHandle_to_the_request_TypeHandle_to_the_request;}/*信号原语类型*/enumAddress_type_Type{T_ISSI,T_ASSI,T_GSSI,T_SMI,T_USSI}/*枚举类型*/signalAL_ACK(AL_ACK_Type);/*定义信号类型*/classAL_ACK_Type{publicLLC_PDU_type_TypeLLC_PDU_type;publicBooleanFlow_control;publicAcknowledgement_TypeFirst_Acknowledgement_Block;publicAcknowledgement_TypeOther_Acknowledgement_Blocks;}/*定义PDU类型*/constBitStringNULL_FCS=‘’b;/*字符串初始化*/constpartTL_BL_DATA_REQ_TypeNULL_BL_DATA_REQ=TL_BL_DATA_REQ_Type(.Address_type=T_ISSI,Main_address=0,Endpoint_identifier=0,TL_SDU=''b,TL_SDU_length=0,Scrambling_code=''b,PDU_priority=0,Stealing_permission=steal_not_required,Subscriber_class=''b,FCS_flag=false,Encryption_air_interface=false,Stealing_repeats_flag=false,Handle_to_the_request=NULL_HANDLE.);/*结构体初始化*/constDurationT_251=16;/*定时器初始化*/变量初始化:5.建立模块内部的类关系图6.定义模块内部接口7.定义模块内部变量8.定义模块内部所需的操作函数9.用SDL语言建立流程图10.编写流程图涉及到的操作函数/*本函数的作用是将请求加入窗口:先申请一个队列,如果队列长度为0,则直接将请求加入队列,如果队列不为空,则根据优先级插入请求原语如果队列所有请求的优先级都比它高,则将其排在末尾*/10.排查错误11.设计测试用例12.编译测试生成的C语言代码与嵌入式软件开发方法的比较(1)TAUG2C+Vxworks工作量工作量相对小,研发人员只需定义必要的接口、变量,画出必要的流程图,并设计算法极为简单的函数,调试通过后,即可自动生成虽然不可读但可正确运行的C代码工作量大,研发人员需要写数千行甚至上万航代码,需要维护很多文件可移植性和修改难度合并工程相当困难,因为所有和工程有关的信息全部存到u2文件中,如果两个工程合并后,研发人员需要花大量的时间解决两个工程之间变量定义的冲突。(而且一个工程不能由两个人分头来做,只能一个人建一个工程)代码很容易修改和移植,工程也容易合并,只需要合并相关的.c和.h即可设计灵活性能支持的C非常有限(C语言基本流程),虽然复杂的算法可以用流程图和少量嵌入的语言解决,但给用惯C语言编程的人增加了难度。C语言自由灵活、语言丰富、可以表达复杂的算法,实现强大的功能与嵌入式软件开发方法的比较(2)TAUG2C+Vxworks软件操作难度编写公共变量定义时,如果直接在上面修改很容易死机,而且工程之间的流程图、接口图等不能直接复制粘贴用Ultra-Edit或者SourceInsight工具使编写代码很容易调试难度用流程图调试,直观性强,定位错误也容易一些。用VC单步跟踪,直观性不强,比较复杂。其他功能单一,只能开发流程性的软件、目前只用于协议栈的开发,无法实现底层驱动的功能。功能强大,用途广泛,已经用于软件开发的各个方面小结•TAUG2软件可以说是软件开发方面的新突破,因为它否定了“只能靠写程序和代码才能开发软件”的观念。•TAUG2软件开发的种种不足,主要源于它还是一个新生事物,还很不成熟,同时也没有广泛得到应用。•虽然TAUG2的缺陷导致它还不能和C语言编程相比,但这种开发思路还是值得学习的,同时也相信随着它的不断成熟和改进,最终可以在软件开发的领域占有一席之地。