色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DWC_ether_qos的以太網驅動開發-無OS環境移植LWIP

嵌入式USB開發 ? 來源:嵌入式Lee ? 作者:嵌入式Lee ? 2023-09-06 08:40 ? 次閱讀

本文轉自公眾號歡迎關注

基于DWC_ether_qos的以太網驅動開發-無OS環境移植LWIP (qq.com)

https://mp.weixin.qq.com/s/u1Bv6s_oh7jZ3sjS3nxbEA

一.前言

前面我們實現了數據的收發,現在我們就可以移植協議棧了。LWIP是一個適合嵌入式平臺的著名的輕量級協議棧,我們這一篇就來無OS環境移植LWIP,下一篇再基于RTOS移植LWIP。

二.源碼

LWIP官網如下

https://savannah.nongnu.org/projects/lwip/

下載源碼git clone https://git.savannah.nongnu.org/git/lwip.git

LWIP的代碼可移植性非常好src下的源碼完全可移植不需要任何修改,移植參考contribports下的模板即可,已經有了unix,freertos,win32的移植可參考。

三.NONEOS移植

3.1添加文件

將src復制到自己的工程路徑

然后添加一個port文件夾和src并列,無OS移植就添加一個noneos子目錄。

.

其中port如下,相關的文件可以從其他port下復制過來修改。

ports/

添加源文件

將src文件夾復制到自己的工程,添加源碼

src/api下所有c

src/core下所有c

src/core/ipv4下所有c

src/core/ipv6下所有c

src/netif/ethernet.c,netif下還有其他很多接口實現,用到可以使用對應的,我們這里只需要使用ethernet.c

頭文件路徑

將目錄src/include,ports/noneos/include添加到頭文件包含路徑。

3.2 移植文件

修改修改的文件

Ports下文件是需要修改的

ports/

lwipopts.h

配置文件,使用宏對LWIP進行配置。

Cc.h

必須位于arch目錄下

Perf.h/perf.c

portethif.h/portethif.c

sys_arch.c

錯誤碼

lwipopts.h中定義#define LWIP_PROVIDE_ERRNO 1則

src/include/lwip/errno.h中定義錯誤編碼和變量errno。

(我們這里使用該方式)

否則cc.h中需要include 或者自己實現錯誤碼宏定義和errno變量。

src/include/lwip/errno.h中可知,如果已經有了對應的頭文件則

可以定義LWIP_ERRNO_STDINCLUDE則自動#include

否則錯誤頭文件由LWIP_ERRNO_INCLUDE定義。

隨機數產生接口

如果有stdint.h則直接使用庫函數,否則自行實現

Cc.h中

#include

extern unsigned int lwip_port_rand(void);

#define LWIP_RAND() (lwip_port_rand())

portethif.c中實現

#include

uint32_t lwip_port_rand(void)

{

return (uint32_t)rand();

}

斷言

不使用斷言,Cc.h中定義

#define LWIP_NOASSERT 1

如果定義了LWIP_NOASSERT則LWIP_ASSERT為空

如果使用斷言,沒有定義LWIP_NOASSERT

則src/lib/lwip/lwip/src/include/lwip/debug.h中

#define LWIP_ASSERT(message, assertion) do { if (!(assertion)) {

LWIP_PLATFORM_ASSERT(message); }} while(0)

此時需要實現LWIP_PLATFORM_ASSERT宏,

如果沒有定義LWIP_PLATFORM_ASSERT宏則默認使用printf

則src/lib/lwip/lwip/src/include/lwip/arch.h中

#define LWIP_PLATFORM_ASSERT(x) do {printf("Assertion "%s" failed at line %d in %sn",

x, __LINE__, __FILE__); fflush(NULL); abort();} while(0)

atoi

Stdlib.h中有實現,如果沒有該庫可以如下源碼實現

/*----------------------------------------------*/

時鐘

lwip/ports/noneos/sys_arch.c下實現

u32_t sys_now(void)返回mS的全局時間。

存儲管理

lwip/ports/noneos/include/lwipopts.h中配置

堆管理

LWIP_RAM_HEAP_POINTER定義堆地址,必須要空間足夠大。

未定義則mem.c中定義大數組ram_heap

MEM_ALIGNMENT設置堆對齊

MEM_SIZE設置堆字節大小

lwip_init->mem_init時初始化,代碼位于mem.c

內存池

pbuf.c調用memp.的接口

lwip_init->memp_init時初始化,代碼位于memp.c

lwip/priv/memp_priv.h中定義各個組件需要的內存池

lwip/ports/noneos/include/lwipopts.h中MEMP_NUM_xxx定義大小。

性能測試接口

lwipopts.h中如果配置LWIP_PERF宏則

arch/perf.h需要實現兩個宏

PERF_START

PERF_STOP

在perf.c/perf.h中具體實現

否則這兩個宏自動置空。

一個參考實現如下

Perf.h

#ifndef LWIP_ARCH_PERF_H

perf.c

#include 

可以看到指定接口執行時間打印如下

wKgaomT31GyAV2MOAAAICZ45IBE418.png

系統層接口

無OS時不需要實現相關接口

src/lib/lwip/ports/noneos/include/lwipopts.h中

#define NO_SYS 1

NO_SYS=1時不能使用socket相關接口

#define LWIP_NETCONN 0

#define LWIP_SOCKET 0

以太網收發接口相關

實現以下幾個函數即可

實現初始化函數lwip_port_eth_init

在netif_add(&netif, (const ip_addr_t *)&ipaddr, (const ip_addr_t *)&netmask, (const ip_addr_t *)&gw, NULL, &lwip_port_eth_init, eernet_input);時調用執行lwip_port_eth_init

實現low_level_output,在執行lwip_port_eth_init時綁定到回調函數

netif->linkoutput = low_level_output;

收到一包數據時調用

lwip_port_eth_input

Portethif.h

#ifndef LWIP_TAPIF_H

Portethif.c

#include 

四.測試

以下忽略了平臺相關的操作,比如以太網驅動初始化等,僅保留lwip相關內容。

#include "lwip/netif.h"

收到包時調用

lwip_port_eth_input(&netif, p_data, len);

初始化與主循環

 /* 在PHY初始化后,尤其是RXC輸出之后才調用,因為GMAC復位需要RXC */ 

使用網口調試工具,發送數據收到后原樣返回。

wKgZomT31GyAO6PAAAEaypu-RkI193.png

五.總結

LWIP代碼移植性非常好,無OS支持也非常好,移植只需要實現平臺相關的配置和宏,實現網口收發接口即可。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    40

    文章

    5419

    瀏覽量

    171594
  • LwIP
    +關注

    關注

    2

    文章

    86

    瀏覽量

    27146
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12072
收藏 人收藏

    評論

    相關推薦

    基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹 (qq.com) 一.前言 ? 在以太網
    的頭像 發表于 08-30 09:23 ?2359次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MAC幀格式介紹

    基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試 一.前言
    的頭像 發表于 08-30 09:37 ?3735次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MDIO<b class='flag-5'>驅動</b>編寫與測試

    基于DWC_ether_qos以太網驅動開發-描述符鏈表介紹

    本文轉自公眾號歡迎關注 一.描述符概述 1.0 前言 對于DWC Ethernet QoS驅動的編寫來說,初始化完成之后,核心操作就是DMA的描述符鏈表配置(linked list
    的頭像 發表于 08-30 09:39 ?4496次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-描述符鏈表介紹

    基于DWC_ether_qos以太網驅動開發-數據流驗證過程

    轉自公眾號歡迎關注 https://mp.weixin.qq.com/s/klrHhaLMM_0W3FGVwHXFkA 基于DWC_ether_qos以太網驅動開發-數據流驗證過程
    的頭像 發表于 08-31 08:41 ?2008次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據流驗證過程

    基于DWC_ether_qos以太網驅動開發-收發驅動編寫與調試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-收發驅動編寫與調試 (qq.com) https://mp.wei
    的頭像 發表于 09-05 08:47 ?2318次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-收發<b class='flag-5'>驅動</b>編寫與調試

    基于DWC_ether_qos以太網驅動開發-LWIP的內存池介紹

    本文轉自公眾號,歡迎關注 https://mp.weixin.qq.com/s/mBoGSf_u9edFF01U_OZT9g 一.前言 lwIP為基礎結構提供了專用的內存池管理,比如netconn
    的頭像 發表于 09-07 08:45 ?1717次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>的內存池介紹

    基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹 (qq.com) https://mp.wei
    的頭像 發表于 09-08 08:40 ?1295次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>的堆管理介紹

    基于DWC_ether_qos以太網驅動開發-LWIP的堆(內存池)未對齊導致問題的案例分享

    本文轉自公眾號歡迎關注 https://mp.weixin.qq.com/s/ErIa2ss2YZLGYbSwoJEzog 一.?前言 內存未對齊訪問問題這個已經是老生常談的問題了, 由于LWIP
    的頭像 發表于 09-09 08:44 ?1718次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>的堆(內存池)未對齊導致問題的案例分享

    基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-RTOS環境移植
    的頭像 發表于 09-11 11:20 ?2085次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-RTOS<b class='flag-5'>環境</b><b class='flag-5'>移植</b><b class='flag-5'>LWIP</b>與性能測試

    基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發調試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發
    的頭像 發表于 09-11 08:40 ?1996次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>在PC上進行<b class='flag-5'>開發</b>調試

    基于DWC_ether_qos以太網驅動開發-LWIP的定時器模塊詳解

    一. 前言 LWIP的定時器模塊,實現了通用的軟件定時器,用于內部的周期事件處理,比如arp,tcp的超時等,用戶也可以使用。這一篇來分析該模塊的實現。 二.代碼分析 2.1源碼 源碼
    的頭像 發表于 09-18 09:33 ?1658次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>的定時器模塊詳解

    基于DWC_ether_qos以太網驅動開發-LWIP的ARP模塊介紹

    TCP/IP通訊第一步需要先調通ARP,否則TCP/IP包都不知道MAC地址要發給誰。這一篇來基于LWIP的ARP實現進行相關的分析。
    的頭像 發表于 09-18 09:34 ?1887次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>LWIP</b>的ARP模塊介紹

    為什么要做OSLWIP

    首先,為什么要做OSLWIP呢?原因很簡單,因為stm32f103c8t6只有20K的RAM,很難支持OS+LWIP
    發表于 08-05 07:38

    設計軟件核心以太網服務質量數據手冊免費下載

    本文描述Synopsys設計軟件核心以太網服務質量DWC以太網QoS核心5.10A。DWC以太網
    發表于 10-23 08:00 ?16次下載
    設計軟件核心<b class='flag-5'>以太網</b>服務質量數據手冊免費下載

    基于DWC_ether_qos以太網驅動開發-包過濾

    以太網上數據非常多,如果所有數據都接收交給軟件去處理軟件負載會非常重,所以一般只需要接收發給自己的數據即可
    的頭像 發表于 09-02 09:19 ?1745次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-包過濾
    主站蜘蛛池模板: 三级黄色网| 99视频免视看| 人人碰在线视频| 寂寞夜晚在线视频观看| TIMI1TV天美传媒在线观看| 亚洲精品另类有吗中文字幕| 欧美精品99久久久啪啪| 韩国精品韩国专区久久| 爱做久久久久久| 中国xxxxxz| 亚洲VA欧美VA天堂V国产综合| 欧美精品成人一区二区在线观看| 国产午夜一级鲁丝片| 扒开美女嫩bbb| 5580免费午夜福利院| 艳照门在线播放| 我就去色色| 人性本色联盟| 欧美 亚洲 另类 综合网| 久久久免费观成人影院| 国产亚洲精品免费视频| 国产www视频| 成人网络电视破解版| 99久久免热在线观看| 2021精品国产综合久久| 一本之道高清在线观看一区| 亚洲成人一区二区| 色偷偷7777www| 人与畜禽CROPROATION免费| 母乳女神春日もな| 毛茸茸womansex| 久久亚洲午夜牛牛影视| 久久激情影院| 九九免费高清在线观看视频| 果冻传媒在线播放| 国产在线成人一区二区三区| 国产精品久久久久成人免费| 国产成人精品永久免费视频 | 亚洲一区自拍高清亚洲精品| 新金梅瓶玉蒲团性奴3| 乌克兰xxxxx|