保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

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 /

/和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页)》
本文链接地址:http://www.oyaya.net/fanwen/view/148424.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。