辐射新维加斯.45:tskNetworkRx

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 05:38:37
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所示。