求助一个简单的uIP功能问题

2019-03-24 14:15发布

现在用LM3S9B96作为下位机,通过TCP协议和PC机的上位机通信。现在想实现的功能就是9B96发送一些少量的数据给PC,没有速度要求,但是要求不能出错,所以没有采用UDP。但是现在PC端用TCP助手一直接收不到数据。   而且现在有一点不太明白,光调用uip_send这个函数就能实现发送了吗?我看源文件只是做了一个内存拷贝,根本没涉及到底层的一些函数啊?假如我想给PC发送“123”这三个数字,直接ROM_EthernetPacketPut(ETH_BASE, sendchar, len)肯定是不行的吧,因为没有包装到帧里面。现在不太明白怎么能把123这个发送的内容包装到帧里面,然后通过ROM_EthernetPacketPut发送呢?   我参考了StellarisWare里面uip的例程,但是好像都是作为Server的例程,跟我这个好像又不太相符。   希望各位指点一下啊,我这个实现起来应该很简单,但是现在不太明白怎么入手。不知道我应该自己写那些函数的内容,哪些内容我是不用关心完全不用修改的,只要直接调用就可以了。对移植和使用的一个流程不太懂。 [ 本帖最后由 ultrabenz 于 2012-5-31 15:59 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
Study_Stellaris
1楼-- · 2019-03-24 22:14
首先要建立连接,然后再发送。
ultrabenz
2楼-- · 2019-03-25 00:36
 精彩回答 2  元偷偷看……
Study_Stellaris
3楼-- · 2019-03-25 05:45
先在 PC 机上打开一个端口。作为 Server 端。
然后在单片机去建立连接,连接建立后就调用相关 API 发送数据了。
ultrabenz
4楼-- · 2019-03-25 06:09
我现在是这样做的,在pc端用网络调试助手,作为server端,事先打开监听窗口。
ETH_init()是用于硬件初始化的,都是ROM_XXX的那些函数,包括设置MAC地址。我设置了单片机这边client端的地址为172.21.28.10,网关地址172.21.28.1,子网掩码255.255.255.0。PC端的IP地址是172.21.28.90。现在就是卡在uip_connect()上了,一直没有连接。
  ETH_init();
    uip_init();
   
    uip_ipaddr(&ipaddr, 172,21,28,10);
    uip_sethostaddr(&ipaddr);
    uip_ipaddr(&ipaddr, 172,21,28,1);
    uip_setdraddr(&ipaddr);
    uip_ipaddr(&ipaddr, 255,255,255,0);
    uip_setnetmask(&ipaddr);
   
   
    uip_ipaddr(&ipaddr, 172,21,28,90);
    while (0 == uip_connect(&ipaddr, HTONS(1000)));

还有一个事儿我不太明白,调用uip_connect之后,系统自动发送SYN帧,然后等待ACK。但是我调用uip_connect之后,没有地方调用过ROM_EthernetPacketPutNonBlocking这样的底层发送函数啊?那个SYN帧是怎么发出去的?是不是就没发出去呢?
Study_Stellaris
5楼-- · 2019-03-25 08:46
 精彩回答 2  元偷偷看……
ultrabenz
6楼-- · 2019-03-25 12:39
您原来做过的uip有作为客户端的例子吗?我在uip官方的app里面找到了一个webclient的例程,但是和我的这种只是发送数据的TCP客户端还不一样。

一周热门 更多>

相关问题

    相关文章