基于RT-Thread的Zynq-7000实时控制系统设计与实现

2023-08-22 08:31王邦继张仲金
仪表技术与传感器 2023年7期
关键词:间通信信号量实时性

尤 磊,王邦继,吴 博,邱 嵩,张仲金

(西南交通大学物理科学与技术学院,四川成都 610031)

0 引言

随着相控阵技术的发展,对控制系统软件的响应能力和功能多样性的需求不断增加,要求系统拥有实时多任务的处理能力[1]。由于多个任务相对独立运行并且需要及时响应,这就需要控制软件对系统任务进行实时统一的管理,通过利用实时操作系统能够很好地实现系统资源的合理调用。目前,国外的VxWorks、RT-Linux等嵌入式实时操作系统具有较成熟的开发方案,国内外学者基于此类操作系统进行研究[2-3],但是VxWorks价格昂贵、不开源,RT-Linux存在实时性改进不稳定、占用资源高的缺点[4]。随着国产操作系统的发展,RT-Thread作为一款国产开源嵌入式实时操作系统,具有实时性高、启动快速、占用资源小的优点,可应用在实时性要求较高的实时监测、航天机器人控制和通信控制系统等场景[5-6],取得了较好的效果。同时利用以太网作为通信传输媒介,便于实时控制所需数据的快速传输[7]。本文基于国产RT-Thread操作系统,结合操作系统的实时多任务调度和实时任务间通信等机制,设计了在Zynq-7000系列的SoC FPGA硬件平台的实时多任务控制系统。

1 系统总体设计

系统控制总体设计采用三层分布式测控体系架构,分别为上位控制计算机、控制系统和现场设备,系统组成框图如图1所示。

图1 系统组成框图

上位控制计算机界面在PC计算机上运行,主要提供操作人员对于控制系统交互功能的人机界面。

控制系统以Zynq-7000系列(ZYNQ xc7z030)的一款可扩展处理、集成了ARM处理器和FPGA可编程逻辑的芯片为核心硬件平台,其中处理器系统(process system,PS)包含了一个主频为800 MHz的双核ARM Cortex-A9处理子系统,并具有以太网控制器MAC、CAN、UART和SDIO等丰富外设资源[8]。控制系统采用双ARM内核处理器方案进行设计,将控制接口分别在ARM1和ARM2内核实现。ARM1利用以太网接收上位控制计算机的指令,经过信息解析处理之后,通过CAN总线实现对现场设备的实时监控。ARM2内核接收ARM1传递的控制信息,通过UART接口控制供电系统为现场设备供电,通过SD卡实现系统的日志管理功能。

现场设备实现对子阵上所有单位天线的相位计算,并控制天线波束指向到位,由CAN总线将运行情况反馈给控制系统处理。

2 控制系统软件设计

2.1 软件系统架构

控制系统采用分层模块化软件设计模式,具体软件系统结构设计如图2所示。首先,以RT-Thread作为底层操作系统,配置驱动ARM内核相关硬件外设。然后根据控制系统实现的功能不同,将控制系统的以太网通信、天线相位控制等实时任务以及供电系统控制、日志管理等非实时任务分别在ARM1和ARM2双核处理器实现,作为实时核和非实时核的划分。控制系统以实时核作为主处理系统,非实时核作为辅助,本文主要对实时核的实时可靠多任务的设计进行说明。

图2 软件系统结构图

控制系统接收上位控制计算机通过以太网传输的指令信息,执行相应的任务。对于实现不同的功能,依据实时系统的特性,去创建相应的任务并分配优先级。系统实时任务的软件框图如图3所示,任务之间通过消息队列邮箱(msg)和信号量(sem)等通信机制,实现任务间的通信与同步,也通过创建全局数组实现资源数据共享。

图3 实时任务软件总体框图

2.2 实时多任务软件设计

对于实时多任务软件设计而言,任务及其优先级的合理划分以及任务间通信机制的合理设置是系统实时性和可靠性的保证[9]。

2.2.1 实时任务的划分和调度

RT-Thread下应用程序的任务运行路线分为实时内核调度执行的线程和处理器产生的中断服务程序2条路线。为了提高系统的实时性和减少系统调用的时间消耗,任务的划分要基于实际工作数据流程进行合理的设计,实时核中RT-Thread中断及任务划分如图4所示。

图4 软件系统结构图

RT-Thread的任务调度是基于优先级抢占式调度,在创建新的线程时,任务优先级的设置主要取决于任务本身的紧急程度,并且优先级不能设置过低,否则会影响到线程管理列表所占用的资源和管理的时效性。

在本文基于优先级抢占调度机制的设计中,主要分为2种运行情况:

(1)优先级高的线程已获得等待的信号,在下一个时间滴答中断发生时,会将CPU的使用权从优先级低的线程处抢夺,使其转入就绪态,进而分配到CPU的使用权。

(2)当创建的线程阻塞获取信号时,主动放弃CPU的使用权,调度系统将在就绪的线程中寻找最高的线程,来分配CPU使用权。

线程优先级配置如表1所示。

表1 线程优先级配置

2.2.2 任务间通信与同步机制设置

RT-Thread提供灵活多样的任务间同步与通信机制,应用于协调任务或者中断处理程序与任务之间的运行,包括消息队列、邮箱和信号量。

图5为采用消息队列和邮箱的任务间通信过程,消息队列用于以太网DMA接收中断服务程序向以太网底层驱动信息接收任务发送以指针方式定义不固定长度的消息,并缓存于其内存空间中。在LwIP协议栈中,LwIP内核消息处理任务在RT-Thread操作系统中作为一个线程运行,在实现以太网接收消息过程中,LwIP内核消息处理线程通过以邮箱消息的形式阻塞等待接收底层网卡处理的以太网信息,并根据接收不同邮箱消息的类型处理相应的消息。

图5 消息列队和邮箱的任务间通信

RT-Thread信号量提供快速的任务间通信机制,为了实现线程任务间运行的协同配合,控制系统的软件设计充分利用了二进制信号量。当CAN接收到数据产生中断时,会调用接收回调函数发送信号量通知CAN数据处理线程有数据到达。对于现场设备反馈的CAN消息类型,以太网发送处理至上位控制计算机显示的任务阻塞获取天线控制CAN信息接收处理线程释放的不同类型的信号量,实现任务间同步运行的功能,具体信号量的任务间同步设计如图6所示。

图6 信号量的任务间同步

3 RT-Thread下的网络通信

3.1 RT-Thread实时操作系统的移植

将RT-Thread移植到Zynq-7000的PS部分主要做以下工作:

(1)利用Vivado软件搭建SoC系统工程。首先,在Vivado软件中创建工程并设置“ZYNQ7 Processing System”IP核建立ARM处理器系统,然后生成硬件信息,服务于SDK软件中应用工程的硬件平台。

(2)利用SDK软件移植RT-Thread操作系统。首先,在SDK软件新建裸机空工程中移植需要完成裁剪的RT-Thread源代码。其中bsp用于存放板级支持包选择Zynq-7000,components组件中主要保留finsh命令组件用于调试输出,complier组件中newlib文件用于平衡GCC编译器内置C库函数差异,include文件和src文件分别是内核源码的头文件和内核源码C文件,不做修改。libcpu文件夹里是CPU接口文件,对于Zynq-7000芯片的PS部分来说,只保留libcpu中arm文件夹里的zynq7000文件夹即可。其次,修改系统时钟等参数以匹配现用的开发平台。然后,修改配置文件rtconfig.h,打开需要启用相应功能的宏定义。最后,创建线程任务用来验证操作系统是否移植成功。

3.2 LwIP协议栈的移植

对于LwIP协议栈的移植来说,主要工作就是为其提供网络MAC驱动开发和PHY驱动开发,即网卡的驱动是网络协议栈功能实现的基础[10-11]。网卡的BSP驱动主要是Zynq-7000的ARM处理器部分通过MAC控制器由RGMII接口控制PHY芯片,最终能够实现发送和接收以太网数据包的功能。BSP驱动包括初始化、接收数据与发送数据。

初始化是对MAC与PHY芯片进行初始化配置。首先,获取MAC并对其进行配置初始化,完成对PHY芯片的访问,创建PHY状态检测线程,获取PHY芯片连接状态。然后,初始化DMA控制器来生成多个缓冲描述符直接管理网络上接收和发送的数据,减轻处理器的负担,提高网络数据包的传输速率[12]。

接收数据驱动功能需要完成数据转移和数据封装等任务,即从网卡芯片接收的数据转移给LwIP所对应的应用程序以及将数据封装成LwIP的数据包结构[13]。以太网BSP执行流程如图7 所示,接收驱动采用DMA产生接收中断触发,将接收的数据转移到LwIP内存分配函数为DMA生成缓冲描述符开辟的pbuf空间中。

图7 以太网BSP执行流程

在发送数据时,应用程序通过Socket套接字接口发送数据,需要经过LwIP协议栈,LwIP各层分别对要发送的数据进行帧封装处理。以太网发送数据函数,其实现过程与接收函数类似,以太网数据帧发送过程是将需要发送的LwIP协议栈pbuf缓冲区的数据拷贝至DMA描述符的缓冲空间中,并使用驱动发送至以太网。

4 实验测试

4.1 以太网通信测试

通过在Zynq-7000上搭建完成控制系统的实验测试平台,PC端上位控制计算机设置控制系统服务端的IP地址和端口号分别为192.168.100.30和20004,两者通过网线直连。上位控制计算机分别以不延时、延时2 ms、延时5 ms、延时10 ms的间隔时间向控制系统发送10 000个UDP指令数据包,控制系统接收到消息并及时上报回复。通过Wireshark分析工具,得出以上过程的往返时间值,即为网络传输时延,其中往返时间(round trip time,RTT)表示从发送方发送数据开始,到发送方收到来自接收方回复信息的确认,总共经历的时间。利用相邻2个数据包的网络传输时延值的绝对差作为时延抖动值[14],并统计出平均抖动作为时延变化情况。测试结果如表2所示,图8为网络传输时延测试值的具体分布情况。

表2 网络传输时延测试

由表2可知,网络传输时延平均值低于1.05 ms,平均抖动值低于0.04 ms,丢包率为0%,此时网络通信比较稳定。通过图8可知,网络传输时延值大部分集中在1.0~1.1 ms,当发送间隔时间变大,需要处理的数据流量变小,处理速度变快,超出范围值就变少。

4.2 系统执行时间测试

采用定时器(triple timer counter,TTC)实现计时功能。其中,时钟选择内部的PS总线时钟,频率为f=133 333 344 Hz。使定时器工作在计数模式,在给定的0到间隔寄存器之间,计数器连续递增。当中断接收以太网的数据时,记下此时计数器值a1;随着接收以太网UDP协议的解析和运行,当对应指令的CAN发出数据时,记下此时计数器的值a2,判断计数值是否存在溢出情况,并使定时器值清空复位。重复多次实验,不存在计数值溢出情况,系统执行时间为T=(a2-a1)/f。统计出系统执行最大时间和最小时间以及系统执行抖动情况,如表3所示,图9为系统执行时间值分布情况。

表3 系统执行时间测试值

图9 系统执行时间值分布图

由表3可知,1 000次的实验结果中 ,最差的情况执行时间为111.86μs,执行时间平均值为93.10μs。图9中,表明了系统执行时间大部分分布的范围在92.5~95.0μs,保证了系统运行的稳定性。

5 结束语

本系统实现了基于RT-Thread和Zynq-7000的实时多任务调度中心的控制系统,通过任务的划分和任务间通信机制的确定等方法,保证了系统的实时性和可靠性,强化了系统模块化设计,使其具有可移植性和可扩展性的特点。经过多次实验测试表明:网络通信稳定可靠,可适用于实时性要求较高的通信系统,并且能够准确及时地执行上位控制计算机发送的指令,实现系统的实时控制。

猜你喜欢
间通信信号量实时性
基于STM32的mbedOS信号量调度机制剖析
细胞间通信预测方法研究进展
基于规则实时性的端云动态分配方法研究
综合航电分区间通信元模型设计研究
Nucleus PLUS操作系统信号量机制的研究与测试
基于虚拟局域网的智能变电站通信网络实时性仿真
航空电子AFDX与AVB传输实时性抗干扰对比
一种车载Profibus总线系统的实时性分析
μC/OS- -III对信号量的改进
Linux操作系统信号量机制的实时化改造