研究生
最后登录1970-1-1
在线时间 小时
注册时间2016-2-20
|
本帖最后由 来俩不甜的 于 2016-8-9 14:18 编辑
刚刚看完,看起来没那么顺畅,就注释了一下,不知是否有注释版的代码,如果有请发我一下,我看的一点注释都没有。初学lwip有不对的地方请指出。- sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread , void *arg, int stacksize, int prio)
- {
- CPU_INT08U ubPrio = LWIP_TASK_START_PRIO;
- OS_ERR ucErr;
- int i;
- int tsk_prio;
- CPU_STK * task_stk;
- if(prio){
- ubPrio +=(prio-1);
- for(i=0; i<LWIP_TASK_MAX; ++i)
- if(LwIP_task_priority_stask[i] == ubPrio)//查找是否已有优先级
- break;
- if(i == LWIP_TASK_MAX){//未找到匹配优先级
- for(i=0; i<LWIP_TASK_MAX; ++i)
- if(LwIP_task_priority_stask[i]==0){//优先级数组中第一个0值赋值为设置的优先级
- LwIP_task_priority_stask[i] = ubPrio;
- break;
- }
- if(i == LWIP_TASK_MAX){
- LWIP_ASSERT( "sys_thread_new: there is no space for priority", 0 );//未找到可设置的优先级
- return (-1);
- }
- }else
- prio = 0;//找到匹配优先级
- }
复制代码- /* Search for a suitable priority */
- if(!prio){ //优先级数组中找到匹配优先级
- ubPrio = LWIP_TASK_START_PRIO;
- while(ubPrio < (LWIP_TASK_START_PRIO+LWIP_TASK_MAX)){ //查找优先级数组中是否超出预设优先级范围之外
- for(i=0; i<LWIP_TASK_MAX; ++i)
- if(LwIP_task_priority_stask[i] == ubPrio){//优先级数组有匹配元素
- ++ubPrio;
- break;//跳出for
- }
- if(i == LWIP_TASK_MAX)//优先级数组无匹配元素
- break;//跳出while
- }
- if(ubPrio < (LWIP_TASK_START_PRIO+LWIP_TASK_MAX))//上一步中找出的优先级数组中没有的但是合法的优先级,必定是优先级数组有零值元素导致此状况
- for(i=0; i<LWIP_TASK_MAX; ++i)
- if(LwIP_task_priority_stask[i]==0){//查找第一个0值优先级,赋值ubPrio
- LwIP_task_priority_stask[i] = ubPrio;
- break;
- }
- if(ubPrio >= (LWIP_TASK_START_PRIO+LWIP_TASK_MAX) || i == LWIP_TASK_MAX){//优先级数组中元素取值有错导致此状况
- LWIP_ASSERT( "sys_thread_new: there is no free priority", 0 ); //ubPrio:优先级数组中有元素小于 LWIP_TASK_START_PRIO,导致合法优先级无法从优先级数组中找到匹配元素
- return (-1); //i:优先级数组中有元素小于 LWIP_TASK_START_PRIO,导致优先级数组无法包括所有合法优先级
- }
- }
- if(stacksize > LWIP_STK_SIZE || !stacksize) //堆栈长度非法判断,若非法则修改到合法
- stacksize = LWIP_STK_SIZE;
- /* get Stack from pool */
- task_stk = OSMemGet( &StackMem, &ucErr );//获取存储空间
- if(ucErr != OS_ERR_NONE){
- LWIP_ASSERT( "sys_thread_new: impossible to get a stack", 0 );
- return (-1);
- }
- tsk_prio = ubPrio-LWIP_TASK_START_PRIO;//得到任务在LwIP_task_TCB数组的编号
- OSTaskCreate(&LwIP_task_TCB[tsk_prio],
- (CPU_CHAR *)name,
- (OS_TASK_PTR)thread,
- (void *)0,
- (OS_PRIO )ubPrio,
- (CPU_STK *)&task_stk[0],
- (CPU_STK_SIZE)stacksize/10,
- (CPU_STK_SIZE)stacksize,
- (OS_MSG_QTY )0,
- (OS_TICK )0,
- (void *)0,
- (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
- (OS_ERR *)&ucErr);
-
- return ubPrio;
- }
复制代码
|
|