介绍一下TI的TCP/IP协议栈--NDK
这是之前用TI的DM642做视频编码器用到的网络协议栈,源码TI官网上有的下载。维基网上也有关于NDK的一些技术文档,都是英文的,看了费劲。
看这个之前我对TCP/IP协议几乎不了解,拿到这个就开始看英文文档,天昏地暗的,边看边整理些东西,没基础真的痛苦,硬着头皮看吧。下面都是我边看边整理的,怕丢了,放到这,以后还有用。
一、NDK中创建任务的方法:
1、用标准的DSP/BIOS API
- struct TSK_Attrs ta;
- ta = TSK_ATTRS;
- ta.priority = OS_TASKPRINORM;
- ta.stack = 0;
- ta.stacksize = stacksize;
- ta.stackseg = 0;
- ta.environ = 0;
- ta.name = "TaskName";
- ta.exitflag = 0;
- hMyTask = TSK_create( (Fxn)entrypoint, &ta, arg1, arg2, arg3 );
[color=rgb(51, 102, 153) !important]复制代码
2、用NDK的任务抽象API
- hMyTask = TaskCreate( entrypoint, "TaskName", OS_TASKPRINORM, stacksize, arg1, arg2, arg3 );
- In both cases, hMyTask is a handle to a DSP/BIOS TSK task thread.
[color=rgb(51, 102, 153) !important]复制代码
二、内存分配
应用程序在分配内存时最好使用标准的malloc()/free()函数,或者使用DSP/BIOS来分配。
三、NDK初始化和配置
1、必须包含NETCTRL.LIB,NETCTRL模块是协议栈初始化、配置和事件调度的核心。
2、由DSP/BIOS创建的线程是程序的入口点,并且最终成为NETCTRL调度线程。这个控制线程直到协议栈关闭才返回给调用者。
3、在调用其他任何协议栈API之前必须先调用NC_SystemOpen()函数。它初始化协议栈及其所需内存环境。它的两个参数Priority和OpMode分别决定调度任务的优先级和调度器何时开始执行。
Priority包括NC_PRIORITY_LOW 和 NC_PRIORITY_HIGH两种,
OpMode包括NC_OPMODE_POLLING 和 NC_OPMODE_INTERRUPT两种,大部分情况使用interrupt模式,而polling模式会持续运行,当使用polling模式时,优先级必须设为低(NC_PRIORITY_LOW)。
4、使用实例:
- //
- // THIS IS THE FIRST THING DONE IN AN APPLICATION!!
- //
- rc = NC_SystemOpen( NC_PRIORITY_LOW, NC_OPMODE_INTERRUPT );
- if( rc )
- {
- printf("NC_SystemOpen Failed (%d)/n",rc);
- for(;;);
- }
[color=rgb(51, 102, 153) !important]复制代码
5、系统配置,包括以下参数:
- · Network Hostname
- · IP Address and Subnet Mask
- · IP Address of Default Routes
- · Services to be Executed (DHCP, DNS, HTTP, etc.)
- · IP Address of name servers
- · Stack Properties (IP routing, socket buffer size, ARP timeouts, etc.)
[color=rgb(51, 102, 153) !important]复制代码
|