一種uIP TCP/IP協(xié)議棧在51系列單片機上的實(shí)現
添加了必須的模塊,對uIP進(jìn)行了正確地配置后,需要編寫(xiě)主程序函數。針對基于以太網(wǎng)的WEB SERVER應用,主程序在完成初始化后將不停的進(jìn)行查詢(xún),如果有新數據包到達則送uip_input()函數處理;如果沒(méi)有新數據包到達則處理定時(shí)事件??蚣艽a如下所示:
通過(guò)實(shí)際的代碼說(shuō)明uIP協(xié)議棧的主控制循環(huán)。
void main(void)
{
/*省略部分代碼*/
/*設置TCP超時(shí)處理時(shí)間和ARP老化時(shí)間*/
timer_set(periodic_timer, CLOCK_CONF_SECOND / 2);
timer_set(arp_timer, CLOCK_CONF_SECOND * 10);
/*定時(shí)器初始化*/
init_Timer();
/*協(xié)議棧初始化*/
uip_init();
uip_arp_init();
/*應用層初始化*/
example1_init();
/*驅動(dòng)層初始化*/
etherdev_init();
/*IP地址、網(wǎng)關(guān)、掩碼設置*/
uip_ipaddr(ipaddr, 192,168,1,9);
uip_sethostaddr(ipaddr);
uip_ipaddr(ipaddr, 192,168,1,16);
uip_setdraddr(ipaddr);
uip_ipaddr(ipaddr, 255,255,255,0);
uip_setnetmask(ipaddr);
/*主循環(huán)*/
while(1)
{
/*從網(wǎng)卡讀數據*/
uip_len = etherdev_read();
/*假如存在數據則按協(xié)議處理*/
if(uip_len > 0)
{
/*收到的是IP數據,調用uip_input()處理*/
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_input();
/*處理完成后,假如uip_buf中有數據,則調用etherdev_send 發(fā)送出往*/
if(uip_len > 0)
{
uip_arp_out();
etherdev_send();
}
}
tcp/ip相關(guān)文章:tcp/ip是什么
評論