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

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

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

3天內不再提示

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

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

本文轉自公眾號歡迎關注

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

一.前言

內存未對齊訪問問題這個已經是老生常談的問題了, 由于LWIP的堆管理中也用到了地址(指針)強制轉換所以也會遇到這個問題。對于老手比較容易發現,對于新手可能會比較疑惑。所以也單獨分享一個案例吧,權當一個小的check list的case。

二.問題

Lwipopts.h中MEM_ALIGNMENT可以配置堆對齊大小,有問題時是配置為1

#define MEM_ALIGNMENT 1U

異常時打印寄存器如下,當然不同平臺異常時如何獲取上下文信息方式不一樣,不在本文討論范圍內,我這里是RISC-V環境。

wKgZomT8eX6AMEQ-AABzY0VnW3o925.png

看到打印的mepc是0x20006C88,異常原因是地址未對齊。

所以是在運行0x20006C88時進入了異常,當然這個地方不一定是原始問題所在點,異常可能是跑了很久才出現的。

所以先在這里打個斷點試試

wKgaomT8eX6AUD_8AABEZWWlkqQ976.png

可以看到是pbuf.c的代碼中,所以可以懷疑是內存池或者堆的問題。

我們運行發現斷點并不能觸發,之前就已經異常了,所以只能跟代碼逐漸縮小范圍確認問題的。一般采用的方式是,逐步斷點或者打印或者刪除代碼,逐步縮小范圍的方法。

可以借鑒一些二分的思想,加快定位。

這里還是從pbuf開始,先找到相關代碼上層函數處,斷點

b pbuf_init_alloced_pbuf

wKgZomT8eX-AdmboAADlv8kiXEA056.png

看到異常前是可以停下來的

看到此時p的值是0x28201406

wKgaomT8eX-AR_T0AABTVvjvaR8580.png

查看如下匯編代碼可知

sw zero,0(a0)即對應代碼p->next = NULL;

sw是word操作指令,但是地址a0不是word對齊,所以會產生異常

wKgZomT8eX-ASom5AAFE3W3Yn_w817.png

再si單步確實進入異常

wKgaomT8eYCADzT-AAEK7I1mMTY531.png

所以問題確認了。

因為堆是分配的一塊區域,每一塊區域的開始地址對齊值就是上面設置的對齊大小,分配區塊后作為其他模塊使用,比如pbuf使用,前面部分作為管理結構體

struct pbuf 操作,所以實際是將一個區塊地址強制轉為了結構體指針。

此時訪問結構體成員,編譯器是自動按照自然對齊生成匯編指令的,因為編譯器并不知道你的對齊要求,所以如果系統不支持對應的指令非對其訪問就有問題,但是有些系統對應的匯編指令的行為支持不對齊訪問那么就沒有問題。

當然出于可靠性設計,建議不要進行強制類型轉換,比如MISRA標準里的規范就是如此。

如果代碼要做到兼容性可靠性非常好就要注意這個問題,此時不能使用強制類型轉換,而是使用字節序手動拼接得到成員的值。

但是出于靈活性考慮,很多協議棧的設計都是直接使用強制類型轉換的,所以這時用戶就需要注意,比如這里我們可以配置#define MEM_ALIGNMENT 4U

來保證上述分配出來的地址p是4字節對齊的,所以按照偏移,其成員也是4字節對齊的,sw指令操作的就是4字節對齊的成員,就不會有問題。

三.總結

以上分享一個簡單的案例,目的是提醒下要注意類似問題,尤其有指針強制類型轉換的要注意對齊問題。問題不難,也不復雜,但是可以作為check list的case可以作為檢查項目。

審核編輯 黃宇

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

    關注

    40

    文章

    5419

    瀏覽量

    171594
  • LwIP
    +關注

    關注

    2

    文章

    86

    瀏覽量

    27148
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12072
收藏 人收藏

    評論

    相關推薦

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

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹 (qq.com) 一.前言 ? 在以太網
    的頭像 發表于 08-30 09:23 ?2360次閱讀
    基于<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 ?3736次閱讀
    基于<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 ?2009次閱讀
    基于<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 ?2319次閱讀
    基于<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以太網驅動開發-無OS環境移植LWIP

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-無OS環境移植LWIP (qq.com) https://mp.we
    的頭像 發表于 09-06 08:40 ?1588次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-無OS環境移植<b class='flag-5'>LWIP</b>

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

    本文轉自公眾號,歡迎關注 https://mp.weixin.qq.com/s/mBoGSf_u9edFF01U_OZT9g 一.前言 lwIP為基礎結構提供了專用的內存管理,比如netconn
    的頭像 發表于 09-07 08:45 ?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>的<b class='flag-5'>內存</b><b class='flag-5'>池</b>介紹

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

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP管理介紹 (
    的頭像 發表于 09-08 08:40 ?1296次閱讀
    基于<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>的<b class='flag-5'>堆</b>管理介紹

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

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試 (qq.com) https:
    的頭像 發表于 09-11 11:20 ?2086次閱讀
    基于<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'>LWIP</b>與性能測試

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

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發
    的頭像 發表于 09-11 08:40 ?1997次閱讀
    基于<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 ?1659次閱讀
    基于<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 ?1888次閱讀
    基于<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模塊介紹

    以太網Lwip例程

    以太網Lwip例程
    發表于 12-06 16:53 ?26次下載
    <b class='flag-5'>以太網</b><b class='flag-5'>Lwip</b>例程

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

    本文描述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>-包過濾
    主站蜘蛛池模板: 日韩精品一区二区三区色欲AV | 久久夜色精品国产亚州AV卜| 国产精品美女久久久久浪潮AV| 别插我B嗯啊视频免费| 97视频免费观看2区| 中字幕视频在线永久在线 | 色噜噜2017最新综合| 日本阿v直播在线| 秋霞午夜理论理论福利无码| 欧美国产影院| 人妻无码AV中文系统久久免费| 女张腿男人桶羞羞漫画| 胖老太与人牲交BBWBBW高潮| 人妖欧美一区二区三区四区| 日本VA在线视频播放| 色婷婷国产麻豆AV| 特黄AAAAAAA片免费视频| 翁公咬着小娇乳H边走边欢A| 无套日出白浆在线播放| 亚洲AV精品一区二区三区不卡| 亚洲AV永久无码精品老司机蜜桃| 亚州三级视频| 亚洲精品AV中文字幕在线| 亚洲人女同志video| 在线观看视频一区| 99国内精品久久久久久久清纯| 99热婷婷国产精品综合| 拔萝卜电视剧高清免费| 国产成+人欧美+综合在线观看| 国产传媒18精品免费1区| 国产一区二区在线观看免费| 精品综合久久久久久8888| 无码精品AV久久久奶水| 亚洲欧美日韩精品自拍 | 善良的女房东味道2在线观看| 十九岁韩国电影在线观看| 亚洲狠狠97婷婷综合久久久久| 樱桃视频高清免费观看在线播放| 99热精品一区| 高清午夜福利电影在线| 狠狠色狠狠色综合日日小说|