基于xDSL宽带网络测试系统的TL1通信协议设计与实现(3)

2025-04-27


        当任务释放一个信号量时要调用semGive(),结果也要依赖于调用时该信号量是否可用。如果可用,本次释放信号量不起任何作用,如果信号量不可用,并且没有在等待该信号量,那么信号量变为可用;如果信号量不可用,并且有一个或多个任务在等待该信号量,那么阻塞队列中的第一个任务解除阻塞,而信号量仍不可用。
        本模块中各任务在设定优先级时都设为相同的优先级,每个任务在处理一条测试命令后将调用taskDelay() 函数,延时操作提供一个简单的任务睡眠机制。taskDelayO用来移动调用任务到相同优先级就绪队列的尾部。在本模块中,通过调用taskDelay()自动将CPU让给系统中同优先级的其他任务来进行处理消息,在嵌入式软件中,除系统任务外,TL1通信协议的各任务优先级是最高的。
        主控函数,将初始化参数。传输层协议TCP封装,全局变量的初始化、各功能参数设定命令、测试命令的监听、队列、消息处理函数的各任务的创建;每个任务也就是一个线程,每个线程都被编制成无限循环的程序,等待特定的输入,执行相应的任务。
        对于TL1消息处理,在系统要进行测试任务之前,启动嵌入式软件,主控函数运行后,处理连接请求线程TL1ServerSession首先要处理来自上位机的连接请求,连接后,然后由TL1AsynClientSession线程从上位机的读取TL1输入消息,将获得的输入消息放入接收队列,定义最大线程数为5,由线程调度进行判断线程池,根据状态来判断将要进行的调度,是创建消息处理线程还是唤醒消息处理线程,由消息解析处理线程AsynTLlMessageHandler对输入命令进行解析,解析后的消息出队列等待消息的发送,对输入命令进行解析,通过函数调用进行测试命令的下发,返回测试数据,将返回的测试数据进行TL1消息格式化处理,得到响应消息放入发送队列,等待出队列进行消息的发送即将响应消息返回上位机:TL1消息处理流程流程图
        整个系统软件划分好模块后,考虑TL1通信协议模块与其它模块之间的接口,本模块对其它模块有两个接口,一个是与上位机(后台处理模块)之间的接口,另一个接口是与硬件驱动程序之间的接口。
        与上位机之间的接口用套接口socket通信进行实现,流套接口提供了双向的、有序的、无重复并且无数据边界的数据流服务。套接口实现客户端的连接,消息的读取与发送消息。与硬件驱动程序之间的接口进行下发测试任务和读取测试后的数据,用函数调用进行下发测试任务的实现,如果测试成功,对数据的读取是通过对于本测试任务的一个全局变量来读取,通过Sprintf函数对测试后的数据进行格式化,如果测试失败,没有测试后的数据的打包过程,直接进行响应消息的格式化;如果在测试过程中有异常情况要上报时是被调用的关系,一样也使用函数调用来实现,下位机在不断的检查设备的状态,如果一旦发现异常就调用此模块的自治消息函数,上报异常情况,TLIAgent接到异常消息,通过自治消息通道将消息发给客户端。模块之间的接口如图3所示。 
        4 结束语
        本系统TL1通信协议模块是基于VxWorks的多任务设计,使系统的实时性和稳定性都非常好。目前该ADSL宽带网络测试系统己通过多个城市电信组织的测试,达到了系统的设计要求和性能指标。该系统不仅提供中国电信规定的公有接口,还自己定义了一套私有接口,有利于系统的功能的扩充。目前系统软件虽然完成了功能,也达到了预期的响应测试速度,但有一些设计上存在一些缺陷,如系统的时钟,并不是由MPC860系统时钟来进行控制的,而是在开发的过程中发现问题后改正的,因为当时硬件平台MPC860已经开发完,无法进行改进,只能由软件来自己定义一个时钟,对于嵌入式软件模块如果有需要系统时间的就要通过函数调用来完成,这样的显示的时间未必很准确,会产生一定的误差。此外,虽然在开发之前已经进行过需求分析,但在开发的过程中发现有些需求并不是很明确,影响到开发的进度,这在以后的产品的研发过程中要尽量的避免。

基于xDSL宽带网络测试系统的TL1通信协议设计与实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于模运算的数字水印算法研究

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219