plantniu 发表于 2012-1-11 00:26:55

最近将开源的这个串口转以太网程序移植到了LPC1766上,发现些问题想和大家讨论下

最近将开源的这个串口转以太网程序移植到了LPC1766上,发现几个问题。
1、使用TCP client的方式在两边数据速率比较高的情况下丢数据的情况有点严重,在串口0上查看打印的提示消息提示,经常是连续打印一串“Taking mu_sock timeout.”,将socket_list中的i值进行了显示,如下图所示。
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712065XOG0AW.jpg
(原文件名:Snap3.jpg)

http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712066UF46T1.jpg
(原文件名:Snap2.jpg)

http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712067G1C80R.jpg
(原文件名:Snap1.jpg)


2、在UDP模式下数据丢失很严重,不知道原始的在sam7x硬件下的表现如何

powercxz 发表于 2012-1-11 01:11:00

LPC1766 处理能力是否不够。

Excellence 发表于 2012-1-11 08:53:37

MARK.

plantniu 发表于 2012-1-11 20:43:17

if (lwip_send(socket_list.socket,rx_buf,rx_buf_offset,0) < 0)

看来是阻塞到了这个发送函数上

继续跟踪,应该是阻塞到了这里。

tcpip_apimsg(struct api_msg *apimsg)
{
struct tcpip_msg msg;

if (mbox != SYS_MBOX_NULL) {
    msg.type = TCPIP_MSG_API;
    msg.msg.apimsg = apimsg;
    sys_mbox_post(mbox, &msg);
    sys_arch_sem_wait(apimsg->msg.conn->op_completed, 0);
    return ERR_OK;
}
return ERR_VAL;
}

这句上
sys_arch_sem_wait(apimsg->msg.conn->op_completed, 0);

大部分时间是正常的,偶尔会阻塞几百ms

plantniu 发表于 2012-1-14 09:47:05

大家在开源这个sam7x的模块上没发现有这种问题吗?

plantniu 发表于 2012-1-14 10:32:14

有用lwip做过串口转网络的进来聊聊啊,不知道为啥lwip_send调用之后有时候会花费一秒多时间,导致丢失很多数据,就是在等这个信号量的时候:sys_arch_sem_wait(apimsg->msg.conn->op_completed, 0);

下面是这个函数
err_t
tcpip_apimsg(struct api_msg *apimsg)
{
struct tcpip_msg msg;

if (mbox != SYS_MBOX_NULL) {
    msg.type = TCPIP_MSG_API;
    msg.msg.apimsg = apimsg;
    sys_mbox_post(mbox, &msg);
    sys_arch_sem_wait(apimsg->msg.conn->op_completed, 0);
    return ERR_OK;
}
return ERR_VAL;
}

plantniu 发表于 2012-2-11 09:58:34

现在发现如果模块通过路由器和电脑连的话就会有这种丢数据的情况,如果直接和电脑连就基本没问题。难道是路由器丢包了导致的?然后lwip有什么机制导致没处理好?

zhuhuanwu163 发表于 2012-5-10 17:47:41

朋友 你好 有个单是做STM32 RS485转以太网模块设计的,看到你也做过类似的设计, 上线后 请留个联系方式我 谢谢
页: [1]
查看完整版本: 最近将开源的这个串口转以太网程序移植到了LPC1766上,发现些问题想和大家讨论下