新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2021-12-14
- 在线时间
- 6 小时
|
lwip移植到ucosiii上,程序在tcp客户端时断开重连时卡在下面的程序中的OSSemPend (*sem,(u16_t)ucos_timeout,OS_OPT_PEND_BLOCKING,NULL,&err);而且在tcp服务器时也卡在这里,有没有遇到同样问题的?求求帮个忙,解答一下;
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
{
OS_ERR err;
u32_t ucos_timeout, timeout_new;
if(timeout!=0)
{
ucos_timeout = (timeout * OS_CFG_TICK_RATE_HZ) / 1000;//转换为节拍数,因为UCOS延时使用的是节拍数,而LWIP是用ms
if(ucos_timeout < 1)
ucos_timeout = 1;
}else
ucos_timeout = 0;
timeout = OSTimeGet(&err);
OSSemPend (*sem,(u16_t)ucos_timeout,OS_OPT_PEND_BLOCKING,NULL,&err);
if(err == OS_ERR_TIMEOUT)
timeout=SYS_ARCH_TIMEOUT;//请求超时
else
{
timeout_new = OSTimeGet(&err);
if (timeout_new>=timeout)
timeout_new = timeout_new - timeout;
else
timeout_new = 0xffffffff - timeout + timeout_new;
timeout = (timeout_new*1000/OS_CFG_TICK_RATE_HZ + 1);//算出请求消息或使用的时间(ms)
}
return timeout;
}
|
|