ucos+lwip应用心得[社区]
oid)
{
u8_t i;
s8_t ucErr;
pQueueMem = OSMemCreate( (void*)pcQueueMemoryPool, MAX_QUEUES, sizeof(TQ_DESCR), &ucErr );//为消息队列创建内存分区
//init lwip task prio offset
curr_prio_offset = 0;
//init lwip_timeouts for every lwip task
//初始化lwip定时事件表,具体实现参考下面章节
for(i=0;i<LWIP_TASK_MAX;i++){
lwip_timeouts[i].next = NULL;
}
}
2.2.2 创建一个和tcp/ip相关新进程:
lwip中的进程就是ucos中的任务,创建一个新进程的代码如下:
#define LWIP_STK_SIZE 10*1024//和tcp/ip相关任务的堆栈大小.可以根据情况自
//己设置,44b0开发板上有8M的sdram,所以设大
//一点也没有关系:)
//max number of lwip tasks
#define LWIP_TASK_MAX 5 //和tcp/ip相关的任务最多数目
//first prio of lwip tasks
#define LWIP_START_PRIO 5 /
//以从(5-9).注意tcpip_thread在所有tcp/ip相关进程中//应该是优先级最高的.在本例中就是优先级5
//如果用户需要创建和tcp/ip无关任务,如uart任务等,
//不要使用5-9的优先级
OS_STK LWIP_TASK_STK[LWIP_TASK_MAX][LWIP_STK_SIZE];//和tcp/ip相关进程
//的堆栈区
u8_t curr_prio_offset ;
sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)
{
if(curr_prio_offset < LWIP_TASK_MAX){
OSTaskCreate(function,(void*)0x1111, &LWIP_TASK_STK[curr_prio_offset][LWIP_STK_SIZE-1],
LWIP_START_PRIO+curr_prio_offset );
curr_prio_offset++;
return 1;
} else {
// PRINT(" lwip task prio out of range ! error! ");
}
}
从代码中可以看出tcpip_thread应该是最先创建的.
2.2.3 Lwip中的定时事件
在tcp/ip协议中很多时候都要用到定时,定时的实现也是tcp/ip协议栈中一个重要的部分.lwip中定时事件的数据结构如下.
struct sys_timeout {
struct sys_timeout *next;//指向下一个定时结构
u32_t time;//定时时间
sys_timeout_handler h;//定时时间到后执行的函数
void *arg;//定时时间到后执行函数的参数.
};
struct sys_timeouts {
struct sys_timeout *next;
};
struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];
Lwip中的定时事件表的结构如下图,每个和tcp/ip相关的 《ucos+lwip应用心得[社区](第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/148424.html
{
u8_t i;
s8_t ucErr;
pQueueMem = OSMemCreate( (void*)pcQueueMemoryPool, MAX_QUEUES, sizeof(TQ_DESCR), &ucErr );//为消息队列创建内存分区
//init lwip task prio offset
curr_prio_offset = 0;
//init lwip_timeouts for every lwip task
//初始化lwip定时事件表,具体实现参考下面章节
for(i=0;i<LWIP_TASK_MAX;i++){
lwip_timeouts[i].next = NULL;
}
}
2.2.2 创建一个和tcp/ip相关新进程:
lwip中的进程就是ucos中的任务,创建一个新进程的代码如下:
#define LWIP_STK_SIZE 10*1024//和tcp/ip相关任务的堆栈大小.可以根据情况自
//己设置,44b0开发板上有8M的sdram,所以设大
//一点也没有关系:)
//max number of lwip tasks
#define LWIP_TASK_MAX 5 //和tcp/ip相关的任务最多数目
//first prio of lwip tasks
#define LWIP_START_PRIO 5 /
/和tcp/ip相关任务的起始优先级,在本例中优先级可
//以从(5-9).注意tcpip_thread在所有tcp/ip相关进程中//应该是优先级最高的.在本例中就是优先级5
//如果用户需要创建和tcp/ip无关任务,如uart任务等,
//不要使用5-9的优先级
OS_STK LWIP_TASK_STK[LWIP_TASK_MAX][LWIP_STK_SIZE];//和tcp/ip相关进程
//的堆栈区
u8_t curr_prio_offset ;
sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)
{
if(curr_prio_offset < LWIP_TASK_MAX){
OSTaskCreate(function,(void*)0x1111, &LWIP_TASK_STK[curr_prio_offset][LWIP_STK_SIZE-1],
LWIP_START_PRIO+curr_prio_offset );
curr_prio_offset++;
return 1;
} else {
// PRINT(" lwip task prio out of range ! error! ");
}
}
从代码中可以看出tcpip_thread应该是最先创建的.
2.2.3 Lwip中的定时事件
在tcp/ip协议中很多时候都要用到定时,定时的实现也是tcp/ip协议栈中一个重要的部分.lwip中定时事件的数据结构如下.
struct sys_timeout {
struct sys_timeout *next;//指向下一个定时结构
u32_t time;//定时时间
sys_timeout_handler h;//定时时间到后执行的函数
void *arg;//定时时间到后执行函数的参数.
};
struct sys_timeouts {
struct sys_timeout *next;
};
struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];
Lwip中的定时事件表的结构如下图,每个和tcp/ip相关的 《ucos+lwip应用心得[社区](第3页)》