TI的集成开发环境中的实时操作系统是DSP/BIOS,它并不包含网络功能。为了解决这个问题,TI结合其C6000系列推出了NDK(Network Developer’s Kit),该开发包可以用较少的资源消耗支持TCP/IP。NDK仅用200~250kB程序空间和95kB数据空间即可支持常规的TCP/IP服务,包括应用层的telnet,DHCP,HTTP等。所以,NDK很适合目前嵌入式系统的硬件环境,是实现DSP上网的重要支撑工具。
在BIOS里创建一个静态的任务,取名network_main。在network_main()里打开系统,配置好IP和子网掩码,然后创建一个动态的任务,完成数据的发送或接收。假设发送函数名为taskNetworkTx,任务优先级是5,创建的语句是:hSend = TaskCreate (tskNetworkTx, "NetTx", 5, 0x2000, 0, 0, 0);接收端为tskNetworkRx,创建的语句是:hRecv = TaskCreate (tskNetworkRx, "NetRx", 5, 0x2000, 0, 0, 0);tskNetworkTx和tskNetworkRx两个函数内部是具体的套接口(socket)编程,根据实际需要可以采用TCP或UDP协议。以发送端为例,采用UDP协议,代码如下:
void tskNetworkTx () { ……...//声明socket,打开SCOM //打开任务 fdOpenSession (TaskSelf ()); //sudp是数据报套接口 sudp = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); //配置目标IP地址和端口号 bzero (&sin1, sizeof (struct sockaddr_in)); sin1.sin_family = AF_INET; sin1.sin_len = sizeof( sin1 ); sin1.sin_port = htons (7); sin1.sin_addr.s_addr = inet_addr ("192.168.0.7"); for ( ; ;){ //等待编码器将数据指针发送过来 pMsgBuf = SCOM_getMsg (EnctoNet, SYS_FOREVER); //将数据指针存到mpg_buf里 mpg_buf = pMsgBuf->bufChannel; //发送以mpg_buf开始的1KB数据 sendto (sudp, (UINT8 *) mpg_buf, 1000, 0, &sin1, sizeof (sin1)); //将SCOM还给编码器 SCOM_putMsg (NettoEnc, pMsgBuf); } } 添加网络收发模块后的系统流程如图3所示。 |
|