最近在做嵌入式实验,需要在LPC1700开发板上跑一个多任务多UDP连接的系统。
可惜1700可怜的RAM只有32K,想使用linux却是有心无力,所以只能用μC/OS-II建立多任务。
建立TCP/IP连接就要用到嵌入式的TCP/IP协议栈,这方面的资源很多LWIP、OPENTCP等,但是对于一个菜鸟来说最简便的莫过于使用周立功的TCP/IP协议栈。
虽然ZLG TCP/IP协议栈不足之处很多,但是代码简单,结构清晰,很适合初学者学习。
作为一个菜鸟,在使用ZLG TCP/IP的时候遇到了些问题,经过一番努力最终将其解决,现在把这些问题写出来供大家交流学习,更希望新手看了能少走弯路。
问题一:建立多个UDP连接时需要修改的参数
udp.h文件中有两个参数UdpMaxRec和MAX_UDP_LINKS,默认为:#define UdpMaxRec 2,#define MAX_UDP_LINKS 2
MAX_UDP_LINKS代表你最多能建立多少个UDP连接,UdpMaxRec代表每个UDP端口项最多能接受多少条UDP消息,当你需要建立多个UDP连接绑定不同的端口,
就要按需要修改这两个参数。
问题二:LPC1700的硬件缓冲区大小与UDP连接数的关系
hardware.h文件中的参数MAX_REC_BUFF,默认为:#define MAX_REC_BUFF 4
这个值代表着整个以太网模块接收和发送缓冲区的大小,它与以太网模块相关寄存器地址相关联,因此修改它需要相关寄存器的起始地址,改起来很麻烦。
问题一提到的两个参数与MAX_REC_BUFF是相关联的,在只有UDP连接的情况下,UdpMaxRec=MAX_REC_BUFF/MAX_UDP_LINKS。
也就是:如果你建立四个UDP连接,每个UDP端口项最多能接受一条UDP消息 #define UdpMaxRec 1,#define MAX_UDP_LINKS 4;
问题来了,如果你建立三个UDP连接,每个UDP端口项最多能接受多少条UDP消息呢?很明显还是一条。
因为如果是两条或两条以上的话,UdpMaxRec*MAX_UDP_LINKS>=6>MAX_REC_BUFF,程序就会出错。