日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

一步步移植uCOS-II and LwIP (三)

 立志德美 2019-07-17

3、LwIP跑起來

在前兩小節(jié)中,我們詳細介紹了lwip移植涉及的核心函數(shù)。至于cc.h、cpu.h、lwipopts.h的中有關數(shù)據(jù)類型、字節(jié)對齊和調(diào)試信息的配置,網(wǎng)絡資源很豐富,也基本上大同小異,本文就不做介紹。需要說明的是,前兩小節(jié)移植借鑒和參閱了網(wǎng)絡上許多其他人的成果。接下來我們要lwip跑起來,先上主程序:

//Other initiation do not list
    Timer_Config(); // 10ms interval for lwip
    LWIP_Init();   //lwip system init
    while(1)
    {
        LWIP_Pkt_Handle();
        LWIP_Periodic_Handle(localtime);
    }   

各個子程序如下:

uint32_t TCPTimer = 0;
uint32_t ARPTimer =0;
uint32_t DHCPfineTimer =0;
uint32_t DHCPcoarseTimer;

#define TCP_TMR_INTERVAL 250
#define ARP_TMR_INTREVAL 5000
#define DHCP_FINE_TIMER_MSECS 500
#define DHCP_COARSE_TIMER_MSECS 6000

struct netif dm9000if;

void LWIP_Init(void)
{
    ip_addr_t ipaddr, netmask, gw;

    lwip_init();

    IP4_ADDR(&ipaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3);
    IP4_ADDR(&netmask,NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3);
    IP4_ADDR(&gw,GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3);

    netif_add(&dm9000if,&ipaddr,&netmask,&gw,NULL,ethernetif_init,ethernet_input);
    netif_set_default(&dm9000if);
    netif_set_up(&dm9000if);
}

void LWIP_Pkt_Handle(void)
{
    ethernetif_input(&dm9000if); //read data from net interface
}

/**
* @brief  LwIP periodic tasks
* @param  localtime the current LocalTime value
* @retval None
*/
void LWIP_Periodic_Handle( uint32_t localtime)
{
#if LWIP_TCP
  /* TCP periodic process every 250 ms */
  if (localtime - TCPTimer >= TCP_TMR_INTERVAL)
  {
    TCPTimer =  localtime;
    tcp_tmr();
  }
#endif

  /* ARP periodic process every 5s */
  if ((localtime - ARPTimer) >= ARP_TMR_INTERVAL)
  {
    ARPTimer =  localtime;
    etharp_tmr();
  }

#ifdef USE_DHCP
  /* Fine DHCP periodic process every 500ms */
  if (localtime - DHCPfineTimer >= DHCP_FINE_TIMER_MSECS)
  {
    DHCPfineTimer =  localtime;
    dhcp_fine_tmr();
    if ((DHCP_state != DHCP_ADDRESS_ASSIGNED) && 
        (DHCP_state != DHCP_TIMEOUT) &&
          (DHCP_state != DHCP_LINK_DOWN))
    {
      /* toggle LED1 to indicate DHCP on-going process */
    //  STM_EVAL_LEDToggle(LED1);

      /* process DHCP state machine */
      LwIP_DHCP_Process_Handle();
    }
  }

  /* DHCP Coarse periodic process every 60s */
  if (localtime - DHCPcoarseTimer >= DHCP_COARSE_TIMER_MSECS)
  {
    DHCPcoarseTimer =  localtime;
    dhcp_coarse_tmr();
  }

#endif
}

LWIP_Init():完成lwip內(nèi)部初始化及網(wǎng)口的注冊;
LWIP_Pkt_Handle(void):周期性查詢網(wǎng)口是否接收到數(shù)據(jù),也可采用中斷的方式;
LWIP_Periodic_Handle( uint32_t localtime):lwip內(nèi)核需要周期性調(diào)用時間處理函數(shù)進行輪詢操作,TIMER2提供10ms中斷;
下載程序后,使用windows的命令行工具ping硬件平臺的IP地址,即 ping 192.168.0.10。
ping result
在ping的過程中觀察“本地連接 狀態(tài)”,發(fā)現(xiàn)兩個小電腦之間閃爍,表明有數(shù)據(jù)通信,當數(shù)據(jù)回顯完成后,兩個小電腦又變成了灰色。
link status

至此,lwip在無操作系統(tǒng)下的移植工作已經(jīng)完成,先撇開uCOS-II系統(tǒng)進行移植,主要是為了對lwip協(xié)議棧有個初步的認識,為后續(xù)操作系統(tǒng)下的移植做好工作。下一步的工作是將實時操作系統(tǒng)移植到硬件平臺上。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多