嵌入式学习小组
直播中

李晓莉

7年用户 158经验值
私信 关注

创建1个TCP任务+3个UDP任务时为什么最后一个任务创建失败

创建1个TCP任务+3个UDP任务时,最后一个任务不能成功创建。程序是在探索者附带的LWIP_网络实验NETCONN_UDP例程的基础上修改的,连接上串口调试助手,显示图片如下面截图。发现是udp_demo.c文件中的  if(udpconn != NULL)  //创建UDP连接成功没有执行进去,而执行了下面的  else printf("UDP2连接创建失败"),一步一步在线调试,发现问题源头在os_sem.c文件中的    OS_EVENT  *OSSemCreate (INT16U cnt)函数这里,这个函数本应该返回一个非零值,但这个程序我觉得只能返回0,肯定是我没看懂这个程序,所以需要各位帮忙分析分析,这个函数怎么才回返回非零值?

回帖(6)

黄玫玫

2020-4-17 08:53:55
这是*OSSemCreate (INT16U cnt)的源代码
OS_EVENT  *OSSemCreate (INT16U cnt)
{
    OS_EVENT  *pevent;
#if OS_CRITICAL_METHOD == 3u                               /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr = 0u;
#endif
#ifdef OS_SAFETY_CRITICAL_IEC61508
    if (OSSafetyCriticalStartFlag == OS_TRUE) {
        OS_SAFETY_CRITICAL_EXCEPTION();
    }
#endif
    if (OSIntNesting > 0u) {                               /* See if called from ISR ...               */
        return ((OS_EVENT *)0);                            /* ... can't CREATE from an ISR             */
    }
    OS_ENTER_CRITICAL();
    pevent = OSEventFreeList;                              /* Get next free event control block        */
    if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empty   */
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }
    OS_EXIT_CRITICAL();
    if (pevent != (OS_EVENT *)0) {                         /* Get an event control block               */
        pevent->OSEventType    = OS_EVENT_TYPE_SEM;        //éèÖÃÎaDÅoÅá¿
        pevent->OSEventCnt     = cnt;                      /*éèÖüÆêyÆ÷3õÖμ Set semaphore value                      */
        pevent->OSEventPtr     = (void *)0;                /*éèÖÿÕÖ¸ÕëUnlink from ECB free list                */
#if OS_EVENT_NAME_EN > 0u
        pevent->OSEventName    = (INT8U *)(void *)"?";
#endif
        OS_EventWaitListInit(pevent);                      /*3õê¼»ˉê¼t¿ØÖÆ¿éInitialize to 'nobody waiting' on sem.   */
    }
    return (pevent);
}
举报

陈鲜孰

2020-4-17 09:01:54
pevent = OSEventFreeList;
举报

冯敬宇

2020-4-17 09:14:04
pevent = OSEventFreeList中的OSEventFreeList是0
        
举报

周颂焱

2020-4-17 09:28:37
任务创建函数会返回错误码,根据错误码在任务创建函数里面分析一下是什么原因导致的!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分