OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4212|回复: 6

创建1个TCP任务+3个UDP任务时,最后一个任务不能成功创建的问题

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-3
在线时间
7 小时
发表于 2018-3-28 20:10:19 | 显示全部楼层 |阅读模式
1金钱
创建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,肯定是我没看懂这个程序,所以需要各位帮忙分析分析,这个函数怎么才回返回非零值?

IF语句.png
5D@C{7J~%]KNRI{F_69MWAO.png
串口调试助手截图.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-3
在线时间
7 小时
 楼主| 发表于 2018-3-28 20:11:48 | 显示全部楼层
这是*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);
}
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-3
在线时间
7 小时
 楼主| 发表于 2018-3-28 20:14:14 | 显示全部楼层
pevent = OSEventFreeList;
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-3
在线时间
7 小时
 楼主| 发表于 2018-3-28 20:14:47 | 显示全部楼层
pevent = OSEventFreeList中的OSEventFreeList是0
        
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-3-28 22:29:08 | 显示全部楼层
任务创建函数会返回错误码,根据错误码在任务创建函数里面分析一下是什么原因导致的!
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-3-3
在线时间
7 小时
 楼主| 发表于 2018-3-30 10:57:52 | 显示全部楼层
zuozhongkai 发表于 2018-3-28 22:29
任务创建函数会返回错误码,根据错误码在任务创建函数里面分析一下是什么原因导致的!

谢谢  通过修改最大事件数量,解决了那个问题,UDP连接可以成功创建,但是TCP不能正常工作,TCP可以连接上,但发不了数据,三个UDP可以工作
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2018-3-31 02:09:41 | 显示全部楼层
RENZHIJIERZJ 发表于 2018-3-30 10:57
谢谢  通过修改最大事件数量,解决了那个问题,UDP连接可以成功创建,但是TCP不能正常工作,TCP可以连接 ...

继续努力
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 06:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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