新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種uIP TCP/IP協(xié)議棧在51系列單片機(jī)上的實(shí)現(xiàn)

一種uIP TCP/IP協(xié)議棧在51系列單片機(jī)上的實(shí)現(xiàn)

作者: 時(shí)間:2011-08-04 來源:網(wǎng)絡(luò) 收藏

  添加了必須的模塊,對(duì)進(jìn)行了正確地配置后,需要編寫主程序函數(shù)。針對(duì)基于以太網(wǎng)的WEB SERVER應(yīng)用,主程序在完成初始化后將不停的進(jìn)行查詢,如果有新數(shù)據(jù)包到達(dá)則送uip_input()函數(shù)處理;如果沒有新數(shù)據(jù)包到達(dá)則處理定時(shí)事件??蚣艽a如下所示:

通過實(shí)際的代碼說明棧的主控制循環(huán)。

  void main(void)

  {

  /*省略部分代碼*/

  /*設(shè)置TCP超時(shí)處理時(shí)間和ARP老化時(shí)間*/

  timer_set(periodic_timer, CLOCK_CONF_SECOND / 2);

  timer_set(arp_timer, CLOCK_CONF_SECOND * 10);

  /*定時(shí)器初始化*/

  init_Timer();

  /*棧初始化*/

  uip_init();

  uip_arp_init();

  /*應(yīng)用層初始化*/

  example1_init();

  /*驅(qū)動(dòng)層初始化*/

  etherdev_init();

  /*IP地址、網(wǎng)關(guān)、掩碼設(shè)置*/

  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)卡讀數(shù)據(jù)*/

  uip_len = etherdev_read();

  /*假如存在數(shù)據(jù)則按處理*/

  if(uip_len > 0)

  {

  /*收到的是IP數(shù)據(jù),調(diào)用uip_input()處理*/

  if(BUF->type == htons(UIP_ETHTYPE_IP))

  {

  uip_arp_ipin();

  uip_input();

  /*處理完成后,假如uip_buf中有數(shù)據(jù),則調(diào)用etherdev_send 發(fā)送出往*/

  if(uip_len > 0)

  {

  uip_arp_out();

  etherdev_send();

  }

  }

tcp/ip相關(guān)文章:tcp/ip是什么




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉