日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

工程師筆記|一個地址未對齊引起的 HardFault 異常

STM32單片機(jī) ? 來源:未知 ? 2023-02-10 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

關(guān)鍵詞:地址對齊,Hardfault,STM32G0





目錄預(yù)覽




1. 概述

2. 問題描述與分析

3. 問題解決

4. 總結(jié)



1.概述

客戶在使用 STM32G070 的時候,KEIL MDK 為編譯工具,當(dāng)編譯優(yōu)化選項(xiàng)設(shè)置為Level0 的時候,程序會出現(xiàn) Hard Fault 異常,而當(dāng)編譯優(yōu)化選項(xiàng)設(shè)置為 Level1 的時候,則程序運(yùn)行正常。


表面上看,這似乎是 KEIL MDK 的問題,通過分析,導(dǎo)致這個問題的本質(zhì)原因是內(nèi)存地址沒有對齊引起的,下面章節(jié)將詳細(xì)分析該問題的來龍去脈以及解決方法。


問題描述與分析

根據(jù)客戶的反饋,引起問題的代碼很簡單,客戶定義了幾個全局?jǐn)?shù)組,在主程序中訪問這幾個數(shù)組就會出現(xiàn) Hard Fault 異常,參考代碼如下。


把客戶提供的代碼片段移植到 NUCLEO-G070RB 開發(fā)板上,問題很容易就復(fù)現(xiàn)了,代碼本身功能簡單,寫法上也沒有錯誤,所以從代碼片段本身上看,無法確定問題出在哪里,通過 KEIL 調(diào)試器,在匯編窗口單步調(diào)試下,最終發(fā)現(xiàn)導(dǎo)致 HardFault 異常的語句為下圖所示語句。


根據(jù)單步調(diào)試得知出現(xiàn)問題的語句為 LDR 指令,參考 Cortex M0 編程手冊 PM0223 得知 LDR 指令的作用是從內(nèi)存地址中加載一個 WORD 數(shù)據(jù)到目的寄存器 Rt 中,其中內(nèi)存地址根據(jù) Rn 或者 SP 寄存器的值以及立即數(shù) imm 得到。


根據(jù)指令的描述,使用 LDR 指令的時候,通過 Rn 和 imm 計(jì)算得到的內(nèi)存地址必須是讀取字節(jié)數(shù)的倍數(shù),LDR 每次讀取一個 WORD,所以使用 LDR 指令時,內(nèi)存地址必須 4字節(jié)對齊。如果地址沒有對齊,則會導(dǎo)致 HardFault 異常。


結(jié)合 LDR 指令的描述,在調(diào)試狀態(tài)下,通過查看寄存器值,圖 2 出錯語句中根據(jù) Rn和 imm 計(jì)算得到的內(nèi)存地址為 R0=0x2000000B,imm=4 所以內(nèi)存地址為 0x2000000F,很顯然這個地址不是 4 字節(jié)對齊的。



而當(dāng)我們改變編譯優(yōu)化選項(xiàng)為 Level1 時,得到的內(nèi)存地址為R0=0x20000000,imm=0x04 顯然這個地址是按照 4 字節(jié)對齊的,所以這種情況下是不會出現(xiàn) HardFault 異常的,印證了客戶的問題現(xiàn)象。



3.問題解決

通過上一節(jié)的分析,明確了導(dǎo)致該問題的本質(zhì)原因是內(nèi)存地址沒有對齊,這個內(nèi)存地址實(shí)際上是代碼中定義的全局變量 g_curPlaySound_app 指向的地址,也就是全局?jǐn)?shù)組變量 SoundFile 的地址,在編譯器不同的優(yōu)化選項(xiàng)下,分配給 SoundFile 變量的地址是不一樣的,在本案例中,編譯優(yōu)化選項(xiàng) Level0 條件下,SoundFile 分配的地址沒有按照WORD 對齊,而在優(yōu)化選項(xiàng) Level1 條件下,SoundFile 分配的地址是 WORD 對齊,所以在兩種優(yōu)化選項(xiàng)下,出現(xiàn)了不一樣的運(yùn)行結(jié)果。


所以要保證程序不出錯,當(dāng)通過指針訪問變量的時候,要確保指針指向的地址是 4 字節(jié)對齊的,在 Keil 環(huán)境下,可以通過__attribute__((aligned (4))) 關(guān)鍵字實(shí)現(xiàn),如下圖所示,通過該關(guān)鍵字,對齊了地址,也就不會出現(xiàn) HardFault 異常了。


圖6 確保地址對齊


4.總結(jié)

地址未對齊是嵌入式系統(tǒng)中容易忽視的一個細(xì)節(jié),忽視這點(diǎn)往往會導(dǎo)致一些奇怪的問題,所以在開發(fā)過程中,注意這些細(xì)節(jié)還是很有必要的。



參考文獻(xiàn):PM0223 Programming maual



長按掃碼關(guān)注公眾號


更多資訊,盡在STM32

點(diǎn)擊“閱讀原文”,可下載原文檔


原文標(biāo)題:工程師筆記|一個地址未對齊引起的 HardFault 異常

文章出處:【微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6078

    文章

    45590

    瀏覽量

    673943
  • STM32
    +關(guān)注

    關(guān)注

    2313

    文章

    11195

    瀏覽量

    374744

原文標(biāo)題:工程師筆記|一個地址未對齊引起的 HardFault 異常

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    硬件工程師甩鍋排行榜 #電子 #電子工程師 #硬件工程師 #甩鍋的各種理由 #揚(yáng)興科技

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2026年03月06日 18:30:55

    電子工程師的雙標(biāo)瞬間 #電子 #電子愛好者 #電子工程師 #揚(yáng)興科技 #雙標(biāo)

    電子工程師
    揚(yáng)興科技
    發(fā)布于 :2026年03月02日 18:04:13

    電子工程師看書的四階段 #電子 #硬件工程師 #電子愛好者 #反轉(zhuǎn) #揚(yáng)興科技

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2026年01月17日 17:29:53

    什么是BSP工程師

    任何軟件的。BSP工程師需要結(jié)合硬件原理圖修改從芯片廠商拿到的參考代碼,調(diào)試板子,使板子上的操作系統(tǒng)能夠正常穩(wěn)定工作,從而提供穩(wěn)定的開發(fā)調(diào)試環(huán)境,這個過程叫做點(diǎn)亮板子,行話叫做Bringup。這
    發(fā)表于 01-13 06:54

    不同薪資對工作的態(tài)度 #硬件工程師 #電子愛好者 #打工人 #搞笑 #揚(yáng)興科技

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2026年01月12日 18:08:22

    LAT1185+地址對齊引起的 HardFault 異常應(yīng)用筆記

    ,則程序運(yùn)行正常。表面上看,這似乎是 KEIL MDK 的問題,通過分析,導(dǎo)致這個問題的本質(zhì)原因是內(nèi)存地址沒有對齊引起的,下面章節(jié)將詳細(xì)分析該問題的來龍去脈以及解決方法。
    發(fā)表于 01-11 17:28 ?0次下載

    硬件工程師都在逛的7論壇你都知道嗎? #科普 #電子 #硬件工程師 #電子愛好者

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2025年12月25日 18:32:00

    招鑲?cè)胧?b class='flag-5'>工程師1,硬件工程師,

    東莞市研生科技有限公司是家藍(lán)牙方案公司,主營藍(lán)牙方案的設(shè)計(jì)開發(fā),產(chǎn)品包括藍(lán)牙BLE/4G透傳/AI智能體方案開發(fā),因公司發(fā)展需要需對外招聘嵌入式軟件開發(fā)工程師,對藍(lán)牙音頻/BLE以及智能IC讀卡器有三年實(shí)操經(jīng)驗(yàn),能單獨(dú)完成項(xiàng)目的軟件開發(fā),男女不限,投簡歷郵箱:65905
    發(fā)表于 08-29 02:14

    優(yōu)秀的射頻測試工程師需要具備哪些技能?

    優(yōu)秀的射頻測試工程師需要具備哪些技能?在無線技術(shù)高速發(fā)展的今天,射頻(RF)測試工程師是確保通信設(shè)備性能與用戶體驗(yàn)的關(guān)鍵角色。從復(fù)雜的調(diào)制方案到無處不在的干擾,從功耗優(yōu)化到標(biāo)準(zhǔn)合規(guī)
    的頭像 發(fā)表于 05-16 10:08 ?2306次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>優(yōu)秀的射頻測試<b class='flag-5'>工程師</b>需要具備哪些技能?
    清丰县| 贡觉县| 将乐县| 晋城| 章丘市| 达尔| 集贤县| 巨鹿县| 英超| 卢氏县| 嘉荫县| 施甸县| 扬中市| 蒙自县| 阿拉尔市| 湄潭县| 鄄城县| 周至县| 容城县| 松阳县| 威宁| 蛟河市| 湘乡市| 射阳县| 上杭县| 松阳县| 苏尼特右旗| 虎林市| 邵阳市| 杭州市| 灵璧县| 高碑店市| 舒城县| 平陆县| 乐清市| 佛坪县| 南召县| 裕民县| 松江区| 丹寨县| 耿马|