现在用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 编辑 ]
此帖出自
小平头技术问答
然后在单片机去建立连接,连接建立后就调用相关 API 发送数据了。
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帧是怎么发出去的?是不是就没发出去呢?
一周热门 更多>