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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

遇見一個編譯優化導致的bug

魚鷹談單片機 ? 來源:魚鷹談單片機 ? 2024-08-12 17:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:公眾號【魚鷹談單片機

作者:魚鷹Osprey

ID :emOsprey

最近在調試 can 通信,因為 c8t6 flash 很小,而魚鷹培訓工程完成的驅動越來越多,導致 flash 不足,因此把 bsp 的優化級別設置成-O2,誰知道在串口輸入數據時直接 hardfault 了:

圖片

進一步跟蹤發現問題出在這條代碼中:

uint32_tcnt=*((uint32_t*)pinfo->pdma_cnt_rx);// 出錯代碼
.....
pinfo->last_dma_cnt = cnt;

這條代碼最開始是這樣

uint16_tcnt=*((uint16_t*)pinfo->pdma_cnt_rx);

因為我的last_dma_cnt 變量是 16 bit,我想節省一下 ram 空間,因為實際上 DMA 的計數器也只使用了 16 bit。

uint16_t        last_dma_cnt;       // used in dma

但是測試時發現出現 hardfault 了,通過匯編分析發現是非四字節對齊訪問 dma 外設,后面通過修改代碼,強制使用 32 bit 訪問,就再也沒出現問題了。

uint32_t cnt = *(( uint32_t*)pinfo->pdma_cnt_rx);

但昨天修改完編譯優化級別后,又一次出現了,匯編分析發現還是對齊問題,因為0x4002005c 這個地址確實是 DMA 的計數器地址。

只是再優化后,沒按我的要求 32bit 訪問,而是自作主張使用16bit訪問,因為它發現 cnt 這個變量操作的地方都是 16 bit,想當然的給我在取值時也給我直接優化成 16 bit 訪問。

圖片

這樣一來,由于 DMA 不支持 2 字節訪問指令,因此直接 hardfault 了。為了解決這個優化問題,可以直接使用 volatile 關鍵字,保證編譯器在取值時按照 4 字節對齊訪問,如下:

uint32_t cnt = *((volatile uint32_t*)pinfo->pdma_cnt_rx);  // must: volatile uint32_t
匯編代碼
0x0800BCA6 6800      LDR      r0,[r0,#0x00]

圖片

完結撒花!

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

    關注

    5

    文章

    97

    瀏覽量

    18406
  • 串口
    +關注

    關注

    15

    文章

    1587

    瀏覽量

    79781
  • 代碼
    +關注

    關注

    30

    文章

    4898

    瀏覽量

    70585
  • 編譯
    +關注

    關注

    0

    文章

    678

    瀏覽量

    33940

原文標題:遇見一個編譯優化導致的 bug

文章出處:【微信號:emOsprey,微信公眾號:魚鷹談單片機】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【GCC編譯優化系列】前后編譯的兩版本固件bin大小不樣?

    【GCC編譯優化系列】前后編譯的兩版本固件bin大小不樣,怎么辦?
    的頭像 發表于 09-09 09:01 ?5470次閱讀
    【GCC<b class='flag-5'>編譯</b><b class='flag-5'>優化</b>系列】前后<b class='flag-5'>編譯</b>的兩版本固件bin大小不<b class='flag-5'>一</b>樣?

    RISC-V中優化導致的問題案例

    本文介紹優化導致的問題案例
    的頭像 發表于 06-08 10:02 ?1366次閱讀
    RISC-V中<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>優化</b><b class='flag-5'>導致</b>的問題案例

    IDF4.2.1的編譯優化bug導致panic怎么處理?

    == 0) && (status.st_utx_out == 0));} 它是inline函數。我們都認為inline關鍵字,會告訴編譯器內聯此函數,于是它的代碼
    發表于 06-21 10:55

    推薦時序優化的軟件~~

    Hi,以前在學校的時候就經常遇見時序收斂的問題,尤其是改RTL好麻煩啊。工作以后和朋友們起做了時序優化的軟件,叫InTime,希望可以幫助有相同問題的朋友。^_^我們搞了免費試用的
    發表于 05-11 10:55

    編譯優化導致USART波特率配置錯誤,請問這是為什么?如何解決?

    菜鳥枚,遇到問題上網找不到答案,只好自己嘗試,請大神指教。 問題描述:配置USART的波特率為38400,結果無法成功接收數據,檢查后發現波特率配置寄存器BRR錯誤, 編譯優化導致
    發表于 07-06 03:05

    由于InnoDB MVCC導致的并發BUG介紹

    [原]記錄由于InnoDB MVCC導致的并發BUG
    發表于 07-17 09:46

    IAR編譯優化等級設置介紹

    有限時可選擇針對代碼大小進行優化,對應用實時響應要求較高的情形則應選擇針對代碼運行速度進行優化。且需注意在項目調試過程中不應將優化等級設置的過高,因高度優化
    發表于 11-21 17:36

    IAR9202編譯優化導致代碼流程出錯

    遇到IAR編譯優化的問題:本想在profile中write callback中做特征值的有效性檢查,卻發現編譯
    發表于 03-05 07:46

    rt-studio bug導致編譯失敗如何解決

    我使用rt-studio 編譯工程 , 使用左上角的構建功能 編譯成功,但是如果是由旁邊的重新構建,就會報錯,錯誤如下樣的文件,使用構建就可以,重新構建就不可以,而且在使用重新構建后,再使用構建
    發表于 11-08 10:19

    rt-studio bug導致編譯失敗如何處理?

    我使用rt-studio 編譯工程 , 使用左上角的構建功能編譯成功,但是如果是由旁邊的重新構建,就會報錯,錯誤如下 樣的文件,使用構建就可以,重新構建就不可以,而且在使用重新構建后,再使用構建
    發表于 04-27 10:54

    編譯器_keil的優化選項問題

    keil編譯器的優化選項針對ARM,對STM32編譯優化的問題
    發表于 02-25 14:18 ?3次下載

    微軟又證實Bug Windows 10或導致無法訪問互聯網

    據外媒報道稱,微軟證實了新的Bug,那就是Windows 10存在可能導致無法訪問互聯網
    的頭像 發表于 03-28 11:20 ?2412次閱讀

    冗余電路導致BUG

      昨天解了BUG低級錯誤導致BUG
    的頭像 發表于 05-14 15:28 ?1200次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>冗余電路<b class='flag-5'>導致</b>的<b class='flag-5'>BUG</b>

    Android編譯優化之混淆配置

    為了使用java8及后續java新版本的特性,Google增加了編譯過程—脫糖(desugaring),但這步會導致更長的編譯時間,這
    的頭像 發表于 12-21 09:21 ?3435次閱讀
    Android<b class='flag-5'>編譯</b><b class='flag-5'>優化</b>之混淆配置

    Triton編譯器的優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為先進的編譯器框架,提供了
    的頭像 發表于 12-25 09:09 ?965次閱讀
    主站蜘蛛池模板: a久久99精品久久久久久蜜芽 | 国产精品日本不卡一区二区 | 亚洲精品色情APP在线下载观看 | 宿舍BL 纯肉各种PLAY H | 国产三级在线精品男人的天堂 | 亚洲精品综合在线影院 | 久久99热这里只频精品6 | 最近在线视频观看2018免费 | 少妇高潮久久久久7777 | 久久黄色精品视频 | 色偷偷91综合久久噜噜 | 综合人妻久久一区二区精品 | 高清午夜福利电影在线 | 迈开腿让我看下你的小草莓声音 | 国产日韩亚洲精品视频 | 最新果冻传媒在线观看免费版 | 男人的天堂色 | 亚洲国产精品久久精品成人网站 | 亚洲AV人无码综合在线观看蜜桃 | 亚洲高清在线精品一区 | 王晶经典三级 | 久久理论片迅播影院一级 | 国产乱人偷精品视频A人人澡 | 亚洲国产在线午夜视频无 | 亞洲人妻AV無碼在線視頻 | 日本69xx 老师 | 国产色精品久久人妻无码看片 | 精品国产乱码久久久久久夜深人妻 | 色婷婷亚洲精品天天综合影院 | 色老99九久精品偷偷鲁 | 超碰在线线公开免费视频 | 日韩av片无码一区二区不卡电影 | 国产国产人免费观看在线视频 | 国产精品资源网站在线观看 | 一个人免费视频在线观看高清频道 | 69精品人妻一区二区三区蜜桃 | 秋霞伦理电影在2017韩国在线伦 | 新香蕉少妇视频网站 | 午夜爽喷水无码成人18禁三级 | 好吊射视频988gaocom | 国产成人在线免费观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品