野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15000|回复: 3

关于lwip移植sys_thread_new函数的中文注释

[复制链接]
发表于 2016-8-9 14:16:29 | 显示全部楼层 |阅读模式
本帖最后由 来俩不甜的 于 2016-8-9 14:18 编辑

复制代码
刚刚看完,看起来没那么顺畅,就注释了一下,不知是否有注释版的代码,如果有请发我一下,我看的一点注释都没有。初学lwip有不对的地方请指出。
  1. sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio)
  2. {
  3.   CPU_INT08U  ubPrio = LWIP_TASK_START_PRIO;
  4.         OS_ERR      ucErr;
  5.         int i;
  6.         int tsk_prio;
  7.         CPU_STK * task_stk;
  8.         if(prio){
  9.                 ubPrio +=(prio-1);
  10.                 for(i=0; i<LWIP_TASK_MAX; ++i)
  11.                         if(LwIP_task_priority_stask[i] == ubPrio)//查找是否已有优先级
  12.                                 break;
  13.                 if(i == LWIP_TASK_MAX){//未找到匹配优先级
  14.                         for(i=0; i<LWIP_TASK_MAX; ++i)
  15.                                 if(LwIP_task_priority_stask[i]==0){//优先级数组中第一个0值赋值为设置的优先级
  16.                                         LwIP_task_priority_stask[i] = ubPrio;
  17.                                         break;
  18.                                 }
  19.                         if(i == LWIP_TASK_MAX){
  20.                                 LWIP_ASSERT( "sys_thread_new: there is no space for priority", 0 );//未找到可设置的优先级
  21.                                 return (-1);
  22.                         }        
  23.                 }else
  24.                         prio = 0;//找到匹配优先级
  25.         }
复制代码
  1. /* Search for a suitable priority */     
  2.         if(!prio){                                                                                        //优先级数组中找到匹配优先级
  3.                 ubPrio = LWIP_TASK_START_PRIO;
  4.                 while(ubPrio < (LWIP_TASK_START_PRIO+LWIP_TASK_MAX)){ //查找优先级数组中是否超出预设优先级范围之外
  5.                         for(i=0; i<LWIP_TASK_MAX; ++i)
  6.                                 if(LwIP_task_priority_stask[i] == ubPrio){//优先级数组有匹配元素
  7.                                         ++ubPrio;
  8.                                         break;//跳出for
  9.                                 }
  10.                         if(i == LWIP_TASK_MAX)//优先级数组无匹配元素
  11.                                 break;//跳出while
  12.                 }
  13.                 if(ubPrio < (LWIP_TASK_START_PRIO+LWIP_TASK_MAX))//上一步中找出的优先级数组中没有的但是合法的优先级,必定是优先级数组有零值元素导致此状况
  14.                         for(i=0; i<LWIP_TASK_MAX; ++i)
  15.                                 if(LwIP_task_priority_stask[i]==0){//查找第一个0值优先级,赋值ubPrio
  16.                                         LwIP_task_priority_stask[i] = ubPrio;
  17.                                         break;
  18.                                 }
  19.                 if(ubPrio >= (LWIP_TASK_START_PRIO+LWIP_TASK_MAX) || i == LWIP_TASK_MAX){//优先级数组中元素取值有错导致此状况
  20.                         LWIP_ASSERT( "sys_thread_new: there is no free priority", 0 );                                        //ubPrio:优先级数组中有元素小于  LWIP_TASK_START_PRIO,导致合法优先级无法从优先级数组中找到匹配元素
  21.                         return (-1);                                                                                                                                                                                                                                                //i:优先级数组中有元素小于  LWIP_TASK_START_PRIO,导致优先级数组无法包括所有合法优先级
  22.                 }
  23.         }
  24.         if(stacksize > LWIP_STK_SIZE || !stacksize)  //堆栈长度非法判断,若非法则修改到合法
  25.                         stacksize = LWIP_STK_SIZE;
  26.   /* get Stack from pool */
  27.         task_stk = OSMemGet( &StackMem, &ucErr );//获取存储空间
  28.         if(ucErr != OS_ERR_NONE){
  29.                 LWIP_ASSERT( "sys_thread_new: impossible to get a stack", 0 );
  30.                 return (-1);
  31.         }
  32.         tsk_prio = ubPrio-LWIP_TASK_START_PRIO;//得到任务在LwIP_task_TCB数组的编号
  33.         OSTaskCreate(&LwIP_task_TCB[tsk_prio],
  34.                                                          (CPU_CHAR  *)name,
  35.                                                          (OS_TASK_PTR)thread,
  36.                                                          (void      *)0,
  37.                                                          (OS_PRIO    )ubPrio,
  38.                                                          (CPU_STK   *)&task_stk[0],
  39.                                                          (CPU_STK_SIZE)stacksize/10,
  40.                                                          (CPU_STK_SIZE)stacksize,
  41.                                                          (OS_MSG_QTY )0,
  42.                                                          (OS_TICK    )0,
  43.                                                          (void      *)0,
  44.                                                          (OS_OPT     )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  45.                                                          (OS_ERR    *)&ucErr);   
  46.        
  47.         return ubPrio;
  48. }
复制代码


回复

使用道具 举报

 楼主| 发表于 2016-8-9 14:17:32 | 显示全部楼层
唉,我的代码呢?
回复 支持 反对

使用道具 举报

发表于 2016-8-9 17:12:40 | 显示全部楼层
代码被论坛吃掉啦? 重新编辑一下
回复 支持 反对

使用道具 举报

发表于 2016-8-9 18:03:40 | 显示全部楼层

只能靠自己了    ,好好注释
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-20 10:31 , Processed in 0.032336 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表