<dfn id="dv7zs"></dfn>

<tr id="dv7zs"><strong id="dv7zs"><optgroup id="dv7zs"></optgroup></strong></tr>

<dfn id="dv7zs"><xmp id="dv7zs"><div id="dv7zs"></div>

<rt id="dv7zs"></rt>
<tr id="dv7zs"><noframes id="dv7zs">
<thead id="dv7zs"><dfn id="dv7zs"><style id="dv7zs"></style></dfn></thead><nobr id="dv7zs"></nobr>
  • 資料介紹
    • 概述
    • 問題描述與分析
    • 問題解決
    • 總結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1185 一個地址未對齊引起的 HardFault 異常

03/26 09:34
398
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1185 一個地址未對齊引起的 HardFault 異常

673.92 KB

概述

客戶在使用 STM32G070 的時候,KEIL MDK 為編譯工具,當(dāng)編譯優(yōu)化選項設(shè)置為Level0 的時候,程序會出現(xiàn) Hard Fault 異常,而當(dāng)編譯優(yōu)化選項設(shè)置為 Level1 的時候,則程序運行正常。表面上看,這似乎是 KEIL MDK 的問題,通過分析,導(dǎo)致這個問題的本質(zhì)原因是內(nèi)存地址沒有對齊引起的,下面章節(jié)將詳細(xì)分析該問題的來龍去脈以及解決方法。

問題描述與分析

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

問題解決

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

總結(jié)

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

資料預(yù)覽

相關(guān)推薦

<rt id="rorzk"></rt>
<rt id="rorzk"><xmp id="rorzk">