這裡只是移植,所以lwip那麼多的協議都不需要管,只要知道**需要我們修改,為什麼修改就可以了。
上圖就是整個移植的基本思路,非常清晰的三個層次。其實想想,本質上就是收發資料,只是lwip協議通過對資料的封裝可以實現網路傳輸。從圖中我們就可以看到這裡首先需要enc28j60的驅動,這個驅動需要實現資料的收發,驅動可以在網上找乙個。其次就是要移植並修改lwip協議了。
u32_t sys_now
()
接著我們需要將enc28j60的接收傳送函式與lwip協議的底層資料接髮介面對接起來。這裡對接檔案是lwip-1.4.1\src\netif下的ethernetif檔案,這個檔案定義了五個函式,
static
void low_level_init(struct netif *netif)
static err_t low_level_output(struct netif *netif, struct pbuf *p)
static
struct pbuf* low_level_input(struct netif *netif)
static
void ethernetif_input(struct netif *netif)
err_t ethernetif_init(struct netif *netif)
low_level_init函式初始化mac位址,
static void
low_level_init(struct netif *netif)
我們將enc28j60的初始化放在這裡。
low_level_output函式是傳遞資料到核心裡,我們將enc28j60packetsend放在裡面
static err_t
low_level_output(struct netif *netif, struct pbuf *p)
enc28j60packetsend(i,tx_data_buf); //·¢ëíêý¾ý°ü
#if eth_pad_size
pbuf_header(p, eth_pad_size); /* reclaim the padding word */
#endif
link_stats_inc(link.xmit);
return err_ok;
low_level_input函式接受核心資料,我們將enc28j60packetreceive放到裡面
static struct pbuf *
low_level_input(struct netif *netif)
#if eth_pad_size
pbuf_header(p, eth_pad_size); /* reclaim the padding word */
#endif
link_stats_inc(link.recv);
} else
return p;
}
其餘的就不需要我們了,這裡直接移植的ethernetif檔案預設是不編譯的,我們將#if 0給取消掉。
新建的netconfig檔案就是配置網路引數了,比如ip位址,mac位址,還有最重要的lwip_periodic_handle函式,處理核心的定時函式,如何tcp定時,arp定時。定時採用systick進行定時,每20ms中斷一次,執行一次lwip_periodic_handle。
基本上lwip的移植就結束了。
手把手教你OA選型
oa選型永遠是oa行業的重要焦點,在選型問題上困擾了很多客戶,雲全oa從這幾個方面教你如何選型。了解研發技術 技術是硬道理。只有過關的技術才會研發出過硬的產品。如果技術不過關,後期將會帶來一系列的問題。同時需要考慮技術的先進性。在現如今社會發展日新月異,今天還遙遙領先的管理模式也許明天就會被淘汰。所...
手把手教你玩轉git
使用以上來寫git命令。mkdir xx 建立乙個空目錄 xx指目錄名 pwd 顯示當前目錄的路徑。git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。git add xx 把xx檔案新增到暫存區去。git commit m xx 提交檔案 m 後面的是注釋。git sta...
npm發布 手把手教你
註冊完畢,回到我們的電腦。windows直接cmd到命令列 輸入以下命令,會提示輸入使用者名稱 密碼 郵箱,這些都是註冊時填寫過的。發布之前首先準備 手動建立乙個命名為lib的資料夾,手動建立index.js package.sjon和typing.d.ts文件,建立完成之後就開始下一步,向裡面新增...