APP下载

基于ND K的DSP网络通信技术研究

2021-12-02郑佳晶高荣荣

电子工业专用设备 2021年5期
关键词:占用率网络通信调用

郑佳晶,高荣荣

(中国电子科技集团公司第四十五研究所,北京100176)

网络通信作为一种有效的通信方式,在DSP应用开发中占据越来越重要的地位。从DSP设备实时获取监控或测量的数据、向DSP设备发送命令控制其采取适当的处理行为等,都需要网络通信的支持。随着嵌入式网络通信技术研究与应用越来越广泛,网络通信处理技术越来越成熟。TI公司推出了TCP/IP协议栈。此协议栈与TI网络开发工具包NDK(Network Developer's Kit)结合在一起使用。NDK是一个基于SYS/BIOS实时操作系统的网络协议栈,目前主要用于开发和验证TI C6000系列和ARM系列嵌入式处理器的网络应用功能。包含在NDK发布版中的代码是通用的C代码。NDK栈作为一个快速的原型平台为开发网络和包处理程序提供服务。它能用于向已经存在的应用程序中添加网络连接,以支持网络的通信、配置和控制。基于SYS/BIOS的网络开发组件,提供网络协议栈的支持,提供基本网络服务开发的接口,简化了DSP网络应用程序的开发[1]。

NDK仅用200~250K的程序空间和95K的数据空间即可支持常规的TCP/IP服务,包括应用层的TELNET、DHCP和HTTP等协议,可使基于数字信号处理技术的因特网终端的网络连接成本大大降低。因此,NDK很适合目前的嵌入式系统硬件环境,是实现DSP网络开发的重要支撑工具。

1 NDK的功能架构

如图1所示,NDK主要由5个库组成,分别是硬件抽象库(hal.lib)、网络控制库(netctrl.lib)、网络工具库(nettool.lib)、操作系统库(os.lib)和协议栈库(stack.lib)。

图1 协议栈控制流

(1)硬件抽象库HAL将具体的底层硬件抽象为一个硬件抽象层与NDK隔离,主要负责管理与网络相关的硬件资源,为NDK提供一组编程接口。包含硬件外设到NDK的接口,例如,计时器、LED指示灯、以太网设备和串口等。

(2)网络工具库NETTOOL库中包含了NDK提供的所有基于网络服务的套接字,以及一些用于网络应用程序开发的工具。在网络工具库中最常用的组件是基于标签的配置系统,它几乎控制栈及其服务的每个方面[2]。

(3)操作系统库将DSP/BIOS操作系统的功能抽象为一个操作系统适配层与NDK隔离,将某些抽象的操作系统调用映射到SYS/BIOS函数调用。这个适应层允许SYS/BIOS系统程序员将NDK系统调整到任何基于SYS/BIOS的操作系统中。

(4)协议栈库主要是TCP/IP协议栈,它包含以太网和点到点协议顶层套接字层的所有内容。TCP/IP协议栈是主要的TCP/IP网络功能库,该库构建在SYS/BIOS操作系统之上,实现了从上层套接字到底层链路层的所有功能。STACK库是基于SYS/BIOS编译的,能充分利用SYS/BIOS操作系统,在平台间迁移时不需要移植。

(5)网络控制库NETCTRL是协议栈配置、初始化和事件调度的核心,它控制TCP/IP与外部的交互。在所有的协议栈模块中,它对NDK的操作时最重要,其功能:

a)负责NDK的初始化和底层设备驱动;

b)通过配置服务回调函数启动和维护系统配置;

c)向底层设备驱动提供接口,同时调度驱动事件;

d)在退出时卸载系统配置和清理驱动。

2 NDK协议栈的配置和初始化

NDK协议栈初始化的基本过程:

(1)运行Stack Thread Begin(Global.stackBeginHook)挂钩函数。注意在这个挂钩函数中,任何与NDK相关的代码都不能运行,因为NC_SystemOpen()函数还没有运行。

(2)用初始化函数对操作系统环境进行初始化:NC_SystemOpen(Prio rity,OpMode),它的两个参数Priority和OpMode分别决定网络事件调度器在SYS/BIOS线程中的优先级和操作模式。这个函数必须在NDK相关的函数被调用之前调用。

(3)通过CfgNew()创建一个新的配置。一旦创建了配置句柄,就可以将配置信息装载到句柄中,既可以整体装载,也可以采用一次一个条目的形式进行装载。

(4)通过配置函数API的调用构建新配置或加载一个原来存在的配置:CfgLoad()/CfgAddEntry(),两者的区别在于整体装载还是逐一进行装载,装载的参数包括:网络主机名,IP地址和子网掩码,默认路由的IP地址,需要执行的服务(例如:DHCP、DNS和HTTP),命名服务器的IP地址,协议栈的属性(例如:IP路由、套接字缓存大小等)。

(5)通过调用NC_NetStart()函数,用上面的配置启动协议栈。该函数由四个参数:配置句柄、指向开始函数的指针、指向结束函数的指针和指向IP地址时间的函数。开始函数和结束函数只被调用一次,开始函数在初始化结束后准备执行网络应用程序时调用,IP地址事件函数允许被多次调用,NC_NetStart()函数直到协议栈绘会话终止才返回。

(6)在一些初步的初始化后,NC_NetStart()函数创建一个新的线程,这个新的线程会调用生成的NetworkOpen()函数。NetworkOpen()函数根据网络需求创建网络任务线程。

(7)在正常操作下,协议栈直到函数NC_Net-Stop()被调用才会关闭。

(8)当NC_NetStart()返回且会话结束后,调用Cfg_Free()释放配置句柄。

(9)当所有资源释放后,调用NC_System-Close完成系统关闭操作[3]。

NDK的初始化流程如图2所示。

图2 NDK初始化流程图

3 NDK与PC通信测试的实现

PC与DSP的网络通信是经常使用的场景之一,采用C/S的网络开发架构,基于socket进行PC与DSP通信的程序设计,PC端作为server,DSP端作为client,在DSP端发送数据,PC端收到数据后不作任何处理,把接收到的数据回传给DSP,在DSP端统计往返时间及误码率。程序流程图如图3所示。

图3 PC与DSP通信流程图

这里采集100次往返时间进行统计分析,DSP端发送接收缓冲区默认设置8192字节。这里从PC操作系统的CPU负载情况进行测试分析,CPU占用率70%时的通信速率统计结果如图4、图5所示。

图5 CPU占用率70%时网络波动

为了测试PC操作系统CPU占用率比较低的情况下的网络通信速率,将与测试无关的进程关闭,减轻CPU的负载。PC操作系统CPU占用率为10%的通信速率统计情况如图6、图7所示。

图6 CPU使用率10%时数值统计

从图4到图7可以看出:在Windows系统占用率低的时候,通信时间的波动确实减小,往返时间也相应的减少了。通信往返时间受PC端影响较大,因为Windows是非实时系统,在消息处理上有其内在的机制。DSP端是实时系统,所以延迟小,响应快。另外,对数据进行校验误码率为零。

图4 CPU使用率70%时数值统计

图7 CPU使用率10%时数值统计与波动分析

另外在测试中关闭了Nagle算法与关闭前进行数据对比分析,发现关闭Nagle并不能减少太多时间。对于socket还有其他设置选项如发送缓冲区大小,接收缓冲区大小以及重传超时时间设置等,可以根据具体的应用进行相关的设置,提高网络通信效率。

4 结束语

通过NDK对TCP/IP协议栈进行初始化和配置,实现了PC与DSP的网络通信,完成了数据网络通信工作,测试研究表明NDK开发套件使用方便,性能优良可靠,可以最大限度地节省开发时间和成本,是嵌入式DSP网络开发的首选。

猜你喜欢

占用率网络通信调用
核电项目物项调用管理的应用研究
基于网络通信的智能照明系统设计
降低CE设备子接口占用率的研究与应用
LabWindows/CVI下基于ActiveX技术的Excel调用
网络通信中信息隐藏技术的应用
基于网络通信的校园智能音箱设计
谈计算机网络通信常见问题及技术发展
基于系统调用的恶意软件检测技术研究
解析交换机CPU占用率
基于排队论的区域路内停车最优泊位占用率研究