OpenEdv-开源电子网
标题:
F407+LAN8720A+ LWIP UDP发送卡死求助
[打印本页]
作者:
libi_00488
时间:
2018-3-14 10:28
标题:
F407+LAN8720A+ LWIP UDP发送卡死求助
F407+LAN8720A 现在出现了一个问题,相同的代码,在不同的板子上面,socket的连接和发送都没有问题。 UDP接收没有问题,UDP发送有的板子卡死,有的板子不卡死。不是偶尔的卡死,是只要UDP发送就卡死,请大神帮忙分析下。有没有人遇到过这样的情况。求助。
作者:
libi_00488
时间:
2018-3-14 10:28
问题找到了,是内存拷贝的时候出问题。。谢谢各位
作者:
正点原子
时间:
2018-3-15 01:34
帮顶
作者:
weiyuliang
时间:
2018-3-15 08:15
裸奔的还是用的RTOS
作者:
libi_00488
时间:
2018-3-15 09:24
用的FreeRTOS
作者:
libi_00488
时间:
2018-3-15 09:49
还有一个现象就是,UDP发送的数据已经完全发送出来了。发送出来后就卡死了。
作者:
libi_00488
时间:
2018-3-15 12:53
发现卡死的地方了,但是不知道原因
#define LWIP_TCPIP_CORE_LOCKING 1
err_t
tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem)
{
#if LWIP_TCPIP_CORE_LOCKING
LWIP_UNUSED_ARG(sem);
LOCK_TCPIP_CORE();
fn(apimsg);
UNLOCK_TCPIP_CORE();
//检测已经运行到这里了,应该返回了。但是,就是卡住到返回
return ERR_OK;
#else /* LWIP_TCPIP_CORE_LOCKING */
TCPIP_MSG_VAR_DECLARE(msg);
LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem));
LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));
TCPIP_MSG_VAR_ALLOC(msg);
TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API;
TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn;
TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg;
sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));
sys_arch_sem_wait(sem, 0);
TCPIP_MSG_VAR_FREE(msg);
return ERR_OK;
#endif /* LWIP_TCPIP_CORE_LOCKING */
}
static err_t
netconn_apimsg(tcpip_callback_fn fn, struct api_msg *apimsg)
{
err_t err;
#ifdef LWIP_DEBUG
/* catch functions that don't set err */
apimsg->err = ERR_VAL;
#endif /* LWIP_DEBUG */
#if LWIP_NETCONN_SEM_PER_THREAD
apimsg->op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET();
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
err = tcpip_send_msg_wait_sem(fn, apimsg, LWIP_API_MSG_SEM(apimsg));
//卡到这里了。。但是,我检测 tcpip_send_msg_wait_sem 这个函数已经运行完了,到了最后一步了
if (err == ERR_OK) {
return apimsg->err;
}
return err;
}
请大神帮忙看看,这到底是怎么回事
作者:
mygod
时间:
2018-3-16 08:50
明显是有个信号量,没有返回
作者:
飀人士
时间:
2018-11-11 19:45
帮顶
欢迎光临 OpenEdv-开源电子网 (http://openedv.com/)
Powered by Discuz! X3.4