摘要:针对TIC6000系列DSP网络开发工具NDK进行研究,结合TMS320DM642芯片详细描述了NDK的结构,讲述了利用NDK开发DSP网络应用程序的一般过程和实际应用中要注意的问题,并给出了NDK网络性能的测试分析,对于开发基于DSP的网络程序具有一定的指导作用。
  关键词:DSP;TMS320DM642;NDK;TCP/IP
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10688-02
  
  1 引言
  
  随着互联网不断发展,在嵌入式设备上进行网络通信成为热门研究对象。TI的C6000系列芯片是面向多媒体数据处理的高端芯片,在视频图像处理领域应用广泛,尤其是TMS320DM642处理器,主频高达600MHz,片上集成以太网接口,不仅在硬件上将嵌入式产品的网络应用成本减少50%,而且结合其推出的NDK网络开发工具在软件上可以快速地开发出网络应用程序,缩短产品开发周期,而且其性能不比一般的网络芯片逊色。
  
  2 NDK的结构
  
  TI公司结合C6000芯片推出了TCP/IP NDK(Network Developer's Kit)开发套件,其主要组件包括:(1)支持TCP/IP协议栈程序库。其中主要包含的库有:支持TCP/IP网络工具的库,支持TCP/IP协议栈与DSP/BIOS平台的库,网络控制以及线程调度的库。(2)示范程序。其中主要包括DHCP/Telnet客户端,HTTP数据服务器示范。(3)支持文档。包括用户手册、程序员手册和平台适应手册。NDK采用紧凑的设计方法,实现了用较少的资源耗费来支持TCP/IP。从实用效果来看,NDK仅用200-250K程序空间和95K数据空间即可支持常规的TCP/IP服务。
  使用NDK相对于操作系统和底层硬件是透明的,这主要是由OS.LIB提供与操作系统DSP/BIOS的接口和HAL.LIB提供对硬件的支持来完成的。在NDK的TCP/IP协议栈中STACK.LIB包括了顶层套接字到底层链路层的所有功能,NETCTRL.LIB 在整个协议栈中起关键作用,协调操作系统和底层硬件驱动,管理所有网络事件,NETTOOL.LIB提供配置网络的各种服务。
  
  3 NDK在DSP/BIOS下的使用
  
  DSP/BIOS是TI开发的实时微型操作系统,支持实时分析、线程管理、调度软件中断、周期函数以及外部硬件中断与各种外设的管理。使用DSP/BIOS所有与硬件有关的操作都必须借助操作系统本身提供的函数完成,应避免直接控制硬件资源。基于DSP/BIOS的程序与传统开发过程是不同的,用户编写的程序由DSP/BIOS调度,不再按标写的次序顺序执行。同样开发基于DSP/BIOS的网络应用程序也必须要遵循一些原则。
  在DSP/BIOS下使用NDK必须注意以下几点: (1)必须在CDB文件中为HAL创建一个周期为100ms的PRD函数,用来驱动llTimerTick()系统函数;(2)OS需要钩子函数为TCP/IP堆栈加载和保存私人变量指针,所以必须在CDB文件中创建两个钩子函数NDK_hookInit()和NDK_hookCreate();(3)必须把工程项目的Include Searching Path指向NDK安装目录下的inc文件夹;(4)为了保证使用NDK的工程项目能正确编译,在CCS的Link Order要按一定的顺序添加库文件,推荐的顺序是:NETCTRL.LIB、HAL_xxxLIB、STACK.LIB、OS.LIB;(5)在使用NDK的过程当中,OS和HAL会创建三个内存段,分别是PACKETMEM、MMBUFFER、OBJMEM,必须在CMD文件中为这三个段在内存中分配存储空间;(6)至少要使用32K的cache,否则应用程序会产生不可预料的错误。
  
  4 TCP/IP堆栈的初始化和配置
  
  在任何SOCKET应用程序建立之前,TCP/IP堆栈必须被正确的配置然后初始化。通常可以动态创建或者在DSP/BIOS中静态创建一个堆栈初始化任务,不管应用程序当中建立了多少SOCKET,在整个系统中只能有一个堆栈初始化任务,并且该任务会成为整个网络任务的唯一调度者,因此该任务在应用程序结束前不会返回。
  堆栈初始化过程:(1)使用NC_SystemOpen()。该函数为所有网络应用程序建立堆栈和内存环境;(2)使用CfgNew()。该函数会创建一个配置句柄,利用该句柄使用CfgAddEntry()函数可以添加DHCP、DNS、HTTP等服务和配置SOCKET缓冲区大小与ARP超时参数;(3)使用NC_NetStart()。该函数根据前面的配置参数启动网络,并创建三个回调函数,分别是网络启动时只运行一次的函数、网络被关闭时只运行一次的函数、当IP地址改变时运行的函数。通常会在启动函数里面创建自己的应用程序线程,在关闭函数里面删除创建的应用程序线程。
  
  5 网络应用程序的开发
  
  如果编程人员熟悉Windows平台的SOCKET的使用,那么在DSP平台上一样可以很容易的开发网络应用程序,甚至可以完全不需要了解硬件结构,因为NDK的API和Windows SOCKET API函数名和功能都是十分相近的。下面的程序采用DHCP协议动态获得IP,UDP协议传输数据,如下:
  //网络初始化
  NC_SystemOpen();
  hCfg = CfgNew();
  CfgAddEntry( hCfg,CFGTAG_SYSINFO,CFGITEM_DHCP_HOS
  TNAME,0,strlen(HostName),(UINT8 *)HostName,0);

……
  //配置DHCP协议动态获得IP
  CI_SERVICE_DHCPC dhcpc;
  bzero(&dhcpc, sizeof(dhcpc));
  dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;
  dhcpc.cisargs.IfIdx = 1;
  dhcpc.cisargs.pCbSrv = &ServiceReport;
  CfgAddEntry(hCfg,CFGTAG_SERVICE,CFGITEM_SERVICE_D
  HCPCLIENT,0,sizeof(dhcpc),(UINT8 *)&dhcpc,0);
  ……
  //配置SOCKET缓冲区大小
  rc = 8704;
  CfgAddEntry(hCfg,CFGTAG_IP,CFGITEM_IP_SOCKBUFMAX,
  CFG_ADDMODE_UNIQUE,sizeof(uint),(UINT8 *)&rc,0);
  //启动网络服务
  do
  {rc = NC_NetStart(hCfg,NetworkOpen,NetworkClose,NetworkIPA
  ddr);
  } while(rc > 0);
  ……
  //配置应用层协议,本程序采用UDP
  SOCKET s;
  struct sockaddr_in sin1;
  s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if(bind(s,(PSA) &sin1, sizeof(sin1)) < 0)
  
本文原文
  {ConPrintf("failed bind (%d)/n",fdError());
  goto leave;}
  ……
  //向PC机传送码流
  sendto(s,pBuf,test,0,&sin1,sizeof(sin1))
  //防止发送过快,任务暂停8ms
  TaskSleep(8);
  ……
  根据实验每次向PC机传送码流最好不要超过1500字节,这是由网络最大传输单元决定的,对于1500字节以上的码流可以采取分割的方法分批传送,并且在每次传送之后调用任务暂停函数TaskSleep()可以有效防止丢帧。在DSP发送和接收数据的时候不要用printf()语句,该语句耗费太多的CPU时钟周期,容易引起系统死机的发生,可以用LOG_printf()代替。
  6 NDK性能测试
  测试NDK性能既有客观性又有主观性。客观性是因为使用标准的工具,并且结果可重现。主观性适应为实际测试要受到很多环境因素的影响,所以只能是性能的估计性测试。
  影响NDK性能的主要因素有:
  socket API:NDK既支持基于缓冲区的典型socket,也支持非拷贝的数据包socket,甚至非拷贝的直接接收的TCP数据流。性能随着所采用的策略而变化。
  socket缓冲区:socket 缓冲区影响TCP发送和接收的窗口大小,并且决定每次发送数据流大小,这对网络性能有很大的影响。
  CPU速度:在cache大小一定的情况下,网络性能随着CPU速度增加而线性提高。
  CPU cache:cache的大小对网络性能有巨大的影响。
  网络硬件设备:以太网硬件设计的好换直接影响DSP和网络接口的速度。
  外部存储器(EMIF)接口:对于和DSP外部存储器接口相连的以太网设备,EMIF的速度对外部解码逻辑有额外的影响。
  下面的测试由TI提供,测试既兼顾最佳的性能又考虑到应用的实际情况,比如socket缓冲区大小为8K,而不是32K或64K,因为这在嵌入式设备中是不切实际的。测试的过程是DSP执行低优先级的网络任务,PC机执行客户基准测试程序,然后与DSP不执行网络任务时CPU的负载情况做对比。
  图2 DM642与Macronix和SMSC的网络性能对比
  不同的cache大小对DM642网络性能有一定影响,实验中随着cache的减少,多余的片上RAM并没有被利用,socket缓冲大小是8760字节。
  图3 不同cache下DM642接收和发送数据网络性能对比
  
  7 结束语
  
  TI推出的NDK网络开发工具不仅可以使技术人员快速开发基于DSP的网络应用程序,而且具有十分可靠的性能,这使得C6000系列芯片完全可以胜任大数据量的视频网络传输的要求,是开发嵌入式网络视频设备的首选。
  参考文献:
  [1]Texas Instrument. TMS320C6000 Programmer's Guide (Rev. I).
  [2]Texas Instrument. TMS320C6000 TCP/IP Network Developer's Kit.
  [3]Texas Instrument. TMS320C6000 Platform Porting Guide.
  [4]彭启琮, 管庆. DSP集成开发环境——CCS及DSP/BIOS的原理与应用[M]. 北京:电子工业出版社,2004.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

TI C6000DSP上TCP/IP协议栈的实现相关推荐

  1. 基于TI C6000的TCP/IP协议栈的研究与实现

    本文来自:东北大学信息学院 李松  吴建华 <TI C6000DSP上TCP/IP协议栈的实现> 有适当删减. 摘要:针对TIC6000系列DSP网络开发工具NDK进行研究,结合TMS32 ...

  2. TCP/IP协议栈在MSP430单片机上的实现

    引言 随着信息技术的不断发展,以及人们对日常生活舒适度.方便度要求的提高,信息家电.智能仪表等产品越来越频繁的出现在我们的生活当中:人们也越来越热衷于把家电.仪表等设备连接到Internet 中,从而 ...

  3. uIP TCP/IP协议栈在51系列单片机上的应用

    uIP 协议栈是一种免费的可实现的极小的TCP/IP协议栈,可以使用于由8位或16位微处理器构建的嵌入式系统.本文分析了uIP协议栈的结构和应用接口,并讨论了如何将其应用到51系列单片机上. 关键字: ...

  4. TCP/IP 协议栈4层结构及3次握手4次挥手

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...

  5. OSI七层 TCP/IP四层 TCP/IP协议栈: 不同的通信协议的大集合

    应用层: 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示层: 数据的表示.安全.压缩.(在五层模型里 ...

  6. TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的tcp/ip和网络! 来源:王东裕 http://wangdy.blog.51cto.com/3845563/1588379 OS ...

  7. C1000k 新思路:用户态 TCP/IP 协议栈

    转自:http://blog.csdn.net/solstice/article/details/26363901 C1000k 新思路:用户态 TCP/IP 协议栈 现在的服务器支撑上百万个并发 T ...

  8. 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

    前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...

  9. 几种开源的TCP/IP协议栈分析

    1.BSD TCP/IP协议栈 BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的.这是因为BSD栈在BSD许可协 议下提供了这些专业栈的 ...

最新文章

  1. xen挂载虚拟机分区删除日志 破解密码无所不能
  2. 计算机地质应用软件,中国地质大学《质软件应用》作业报告.doc
  3. Oracle的left join中on和where的区别
  4. CentOS安装MongoDB
  5. 智力测试题2——“五个人、五座房子”问题
  6. java作业 雏田的两个技能 类与对象
  7. 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
  8. html5华文行楷字体代码,html5 支持的字体样式
  9. 科普 | 天才在左,疯子在右
  10. cpu倍频模式怎么调_BIOS:增加倍频比率调整选项
  11. 第34次中国互联网络发展状况统计报告
  12. Deli条码打印机如何批量打印二维码
  13. iOS 获取指南针的数据
  14. 科学怪物!3D人体全身运动捕捉系统,港中文联合Facebook出品
  15. 【字节跳动】 https://job.bytedance.com/campus 内推码:MZ9BJHD 电话:13855119574 邮箱:yinxiang.stephen@bytedance.com
  16. Oracle PLSQL
  17. 解决 redis 存入中文,取出来是乱码wenti
  18. 主播直播间抖音电商脚本运营话术模板表格方案管理计划
  19. asp.net简易留言板
  20. 渥太华大学计算机科学COOP,加拿大渥太华大学热门专业【生物工程计算机科学】】申请要求...

热门文章

  1. devi into python 笔记(一)字典 列表的简单操作
  2. Range在各浏览器下的问题和常见处理办法
  3. [转载]Android创世纪 - 第二天
  4. 拒绝图片延迟加载,爽爽的看美图
  5. SQL Server的链接服务器技术小结
  6. 附实例!图解React的生命周期及执行顺序
  7. java String format占位符
  8. 使用 laravel 命令安装 Laravel
  9. HDOJ 1036 输入输出 水
  10. 浅析堡垒机概念及工作原理(转)