u-boot & freertos & lwip & mc35i

43 views
Skip to first unread message

ares qi

unread,
Jul 22, 2006, 6:31:19 AM7/22/06
to are...@googlegroups.com, are...@yahoogroups.com
使用mc35i建立grps tcp/ip通信模块

为了建立这个应用,我是用了u-boot & freertos & lwip 。将来可以去掉u-boot,现在用u-boot只是方便。

关于u-boot&freertos,见另外一篇文章。

对于lwip,我用的是1.1.1,感觉还不错,基本不用修改。关键是要理解lwip的内部原理,如它的sys.c
sys_arch.c,单线程timeout机制,以及整体上的线程层次。

总的来说,如果系统提供多线程机制,可以使用它的netconn
api,那么tcp/udp/ip就是用了一个线程,应用应该在另外一个线程中。如果使用ppp,就像mc35i中那样,则ppp又使用了一个线程。

需要修改的地方不多,如下:
1. mem,memp,pbuf中仍存在内存对齐问题,应注意
2. 加上适当的sio
3. 在应用中将在ppp完全打通(sifup)后,ppp对应的netif 应该up,我在这里稍微改变了一下pppIOCtl,以便方便在应用线程中使用
4. randm.c的随机数按照最简单的方式改,srand()就返回系统tickcount
5. sys_arch.c继承的freertos中的lwIP_Demo_Rowley_ARM7,除了:sys_mbox_post改成了无限等待;sys_arch_mbox_fetch和sys_arch_sem_wait中的timeout参数是毫秒,而freertos内部用的tick,这里需要改变一下
4. lwipopts.h中重要的调整如下
#define MEM_SIZE 1024*4
#define MEMP_NUM_NETBUF 4
#define PBUF_POOL_SIZE 16*2
#define TCP_MSS 512
#define TCP_SND_BUF 1024


另外,为了调试方便,我单独写了一个任务,可以管理ppp,只是打开和关闭,否则老拔mc35i的电源也太麻烦,还要将pppmain快结束时加了个等待信号量,最外层加了个死循环。

最后分别建立了tcpEcho server 和 udpEcho
server,感觉还不错,tcp我一次发了个50多k的文件,完整的给我又传回来了,不错。udp的包不能大于ppp的mtu,我已经打开了分段和重组,不知道为啥。后来,我设定了定时器连续向echo
server发数据,分别发了300多次,大约有500多k数据量(我发的包大小可变),tcp完全没问题,看来重传机制还是好啊,udp有时候有丢包,不严重,只丢了几个包,我在板上接收ppp的数据没有使用中断,相信是用中断后效果会更好。

Reply all
Reply to author
Forward
0 new messages