手把手教你移植LWIP(ENC28J60)

2021-07-29 22:37:28 字數 1863 閱讀 7335

這裡只是移植,所以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文件,建立完成之後就開始下一步,向裡面新增...