亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

STM32芯片異常復(fù)位的原因有哪些

STM32單片機(jī) ? 2019-03-08 16:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

問(wèn)題描述

STM32用戶反饋,當(dāng)使用STM32L4芯片的時(shí)候,程序運(yùn)行一段時(shí)間后,會(huì)忽然復(fù)位。復(fù)位后程序繼續(xù)運(yùn)行,但是還會(huì)繼續(xù)復(fù)位,原因不詳。

問(wèn)題解析

初步確定復(fù)位的原因,是硬件復(fù)位,如外部NRST被拉低,還是軟件復(fù)位,包括軟件直接調(diào)用復(fù)位,或者看門(mén)狗復(fù)位,還是低功耗模式如standby模式被喚醒時(shí)產(chǎn)生中斷。

查看復(fù)位狀態(tài)寄存器了解復(fù)位大方向,然后做進(jìn)一步得拆解分析。

目前客戶項(xiàng)目的復(fù)位原因是因?yàn)榭撮T(mén)狗復(fù)位,即客戶使用了IWDG,但由于某種原因沒(méi)有及時(shí)喂狗,導(dǎo)致IWDG超時(shí)復(fù)位。初步懷疑由于客戶軟件的問(wèn)題,程序跑飛,進(jìn)入異常處理。

因?yàn)榭蛻舻漠惓L幚砗瘮?shù)中并沒(méi)有做任何動(dòng)作,導(dǎo)致獨(dú)立看門(mén)狗IWDG復(fù)位?;诖?,我們先關(guān)閉IWDG,然后在所有的異常處理中,先加入死循環(huán)并打上斷點(diǎn),對(duì)異常原因進(jìn)行捕捉。

 STM32芯片異常復(fù)位的原因有哪些

 STM32芯片異常復(fù)位的原因有哪些

 STM32芯片異常復(fù)位的原因有哪些

正如我們所猜測(cè),的確是由于程序跑飛導(dǎo)致。程序停在了voidHardFault_Handler(void) 。

通過(guò)查看SP以及回溯棧里面的內(nèi)容,找到了對(duì)應(yīng)的LR,具體方法如下:

 STM32芯片異常復(fù)位的原因有哪些

當(dāng)中斷產(chǎn)生時(shí),按照上圖所示的順序進(jìn)行壓棧,同時(shí)棧指針SP--,即: R0, R1, R2, R3, R12, LR, PC, xPSR。

 STM32芯片異常復(fù)位的原因有哪些

如上圖所示,當(dāng)產(chǎn)生異常時(shí),如果call stack窗口顯示不出來(lái)的話,只能根據(jù)core的寄存器手動(dòng)回溯棧,以找到出錯(cuò)時(shí)的指針。根據(jù)ARM core的說(shuō)明,SP+6,即紅框的部分,為中斷處理后LR和PC,據(jù)此可以追溯函數(shù)異常時(shí)的位置。

根據(jù)出錯(cuò)時(shí)的PC和LR,發(fā)現(xiàn)是浮點(diǎn)運(yùn)算的函數(shù),初步判斷是因?yàn)楦↑c(diǎn)運(yùn)算導(dǎo)致,比如沒(méi)有對(duì)齊導(dǎo)致的Hardfault,但實(shí)際檢查發(fā)現(xiàn),并不是浮點(diǎn)運(yùn)算的問(wèn)題。

問(wèn)題一時(shí)陷入了僵局。但有一點(diǎn)是確定的,是因?yàn)闂5膮^(qū)域被異常覆蓋或者改寫(xiě)導(dǎo)致產(chǎn)生hardfault。

由于問(wèn)題可以穩(wěn)定復(fù)現(xiàn),采取逐個(gè)排除法最終發(fā)現(xiàn)了問(wèn)題的所在:

當(dāng)把一個(gè)局部數(shù)組變量改為全局?jǐn)?shù)組時(shí),問(wèn)題消失!

由于局部數(shù)組變量是保存在當(dāng)中,所以懷疑是對(duì)這個(gè)局部數(shù)組變量使用不當(dāng)導(dǎo)致了棧被覆蓋或者改寫(xiě)。

追查這個(gè)局部變量數(shù)組:

 STM32芯片異常復(fù)位的原因有哪些

 STM32芯片異常復(fù)位的原因有哪些

 STM32芯片異常復(fù)位的原因有哪些

經(jīng)檢查發(fā)現(xiàn),這個(gè)原先是8bit的局部變量的數(shù)組,在最后被強(qiáng)制轉(zhuǎn)換成了uint32_t*類型的指針,由于是指針,在對(duì)其進(jìn)行++或--操作時(shí),都是按照4字節(jié)寬帶操作的,這就相當(dāng)于擴(kuò)大了4倍,覆蓋了后面的棧的內(nèi)容,導(dǎo)致了程序跑飛。

小結(jié)

當(dāng)芯片異常復(fù)位或者進(jìn)入異常處理 (如Hard fault, Mem Manage, Bus fault等)時(shí),首先考慮的是,如何快速的復(fù)現(xiàn)這個(gè)問(wèn)題,當(dāng)問(wèn)題被穩(wěn)定復(fù)現(xiàn)的時(shí)候,可以通過(guò)調(diào)試工具在異常處理的地方打上斷點(diǎn)停留,這樣就可以獲取到棧指針SP,通過(guò)SP去看棧里面的內(nèi)容去回溯棧。當(dāng)然,如果棧的內(nèi)容被無(wú)端改寫(xiě)時(shí),棧里面的內(nèi)容,如保存的LR就沒(méi)有太大的參考意義。不過(guò),可以通過(guò)觀察棧里面的內(nèi)容,去估測(cè)是哪個(gè)模塊或者函數(shù)異常修改了棧的內(nèi)容,進(jìn)而定位最終的問(wèn)題源。


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

    關(guān)注

    2302

    文章

    11108

    瀏覽量

    370272
  • STM32芯片
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    4788

原文標(biāo)題:經(jīng)典案例解析 | STM32芯片異常復(fù)位

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM32單片機(jī)的應(yīng)用筆記 奇怪的NRST 管腳異常復(fù)位問(wèn)題

    異常復(fù)位問(wèn)題的通常解決思路 我們知道, 導(dǎo)致MCU異常復(fù)位原因很多, 比如外部
    的頭像 發(fā)表于 07-13 18:55 ?1.3w次閱讀
    <b class='flag-5'>STM32</b>單片機(jī)的應(yīng)用筆記 奇怪的NRST 管腳<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>問(wèn)題

    分析一個(gè)關(guān)于STM32 芯片異常復(fù)位的經(jīng)典案例!

    應(yīng)用軟件產(chǎn)生異常的地方!問(wèn)題描述某STM32用戶反饋,當(dāng)使用STM32L4芯片的時(shí)候,程序運(yùn)行一段時(shí)間后,會(huì)忽然復(fù)位。
    發(fā)表于 04-07 08:00

    STM32F051K8U6芯片復(fù)位異常

    STM32F051K8U6芯片復(fù)位異常,懷疑芯片內(nèi)部電源檢測(cè)(POR/PDR)電路異常,導(dǎo)致
    發(fā)表于 12-19 11:41

    導(dǎo)致MCU出現(xiàn)功能嚴(yán)重異常的幾個(gè)原因分析

    我們?cè)趶氖翸CU應(yīng)用開(kāi)發(fā)過(guò)程中,難免會(huì)碰到MCU芯片異常的問(wèn)題。比如異常復(fù)位,表現(xiàn)為復(fù)位電平
    發(fā)表于 11-29 16:10 ?1.3w次閱讀

    STM32 Bootloader異常復(fù)位如何解決

    客戶反饋通過(guò)PC軟件Flashloader不能夠跟STM32 MCU自帶Bootloader連接。并且系統(tǒng)運(yùn)行一段時(shí)間后異常復(fù)位。
    的頭像 發(fā)表于 03-23 10:26 ?1.1w次閱讀
    <b class='flag-5'>STM32</b> Bootloader<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>如何解決

    STM32引起電源和系統(tǒng)異常復(fù)位原因

    關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容來(lái)源:STM32每一塊處理器都有復(fù)位的功能,不同處理器復(fù)位的類型可能有差異,引起復(fù)位原因也可能有多種。今天
    發(fā)表于 01-05 14:28 ?4次下載
    <b class='flag-5'>STM32</b>引起電源和系統(tǒng)<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>的<b class='flag-5'>原因</b>

    STM32學(xué)習(xí)筆記 | 引起電源和系統(tǒng)異常復(fù)位原因

    關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容每一塊處理器都有復(fù)位的功能,不同處理器復(fù)位的類型可能有差異,引起復(fù)位原因也可能有多種。STM32
    發(fā)表于 01-17 12:45 ?2次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)筆記 | 引起電源和系統(tǒng)<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>的<b class='flag-5'>原因</b>

    經(jīng)典案例解析 | STM32芯片異常復(fù)位

    問(wèn)題描述:某STM32用戶反饋,當(dāng)使用STM32L4芯片的時(shí)候,程序運(yùn)行一段時(shí)間后,會(huì)忽然復(fù)位。復(fù)位后程序繼續(xù)運(yùn)行,但是還會(huì)繼續(xù)
    發(fā)表于 02-10 11:30 ?19次下載
    經(jīng)典案例解析 | <b class='flag-5'>STM32</b><b class='flag-5'>芯片</b><b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>

    STM32芯片的那些系統(tǒng)級(jí)復(fù)位功能

    我們知道,STM32芯片很多系統(tǒng)級(jí)的復(fù)位,比方上電復(fù)位、欠壓復(fù)位、看門(mén)狗
    的頭像 發(fā)表于 10-19 09:06 ?6335次閱讀

    基于STM32芯片特定外設(shè)復(fù)位的功能

    我們知道,STM32芯片很多系統(tǒng)級(jí)的復(fù)位,比方上電復(fù)位、欠壓復(fù)位、看門(mén)狗
    的頭像 發(fā)表于 06-22 09:08 ?3528次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>芯片</b>特定外設(shè)<b class='flag-5'>復(fù)位</b>的功能

    STM32 Bootloader異常復(fù)位案例

    電子發(fā)燒友網(wǎng)站提供《STM32 Bootloader異常復(fù)位案例.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 09:17 ?3次下載
    <b class='flag-5'>STM32</b> Bootloader<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>案例

    單片機(jī)異常復(fù)位原因 簡(jiǎn)述單片機(jī)如何復(fù)位

    單片機(jī)異常復(fù)位原因 簡(jiǎn)述單片機(jī)如何復(fù)位? 單片機(jī)異常復(fù)位是指在正常運(yùn)行期間,單片機(jī)出現(xiàn)了不可恢復(fù)
    的頭像 發(fā)表于 10-17 16:44 ?4620次閱讀

    STM32復(fù)位電路用復(fù)位芯片和阻容復(fù)位電路區(qū)別

    系統(tǒng)中,復(fù)位電路是保證系統(tǒng)正常工作的重要部分。當(dāng)系統(tǒng)出現(xiàn)異常或需要重新啟動(dòng)時(shí),復(fù)位電路能夠迅速將系統(tǒng)恢復(fù)到初始狀態(tài)。STM32微控制器的復(fù)位
    的頭像 發(fā)表于 08-06 10:26 ?3410次閱讀

    單片機(jī)異常復(fù)位原因

    單片機(jī)異常復(fù)位是指單片機(jī)在正常工作過(guò)程中,非預(yù)期地返回到初始狀態(tài)或重啟。這種異常復(fù)位現(xiàn)象可能由多種因素引起,以下是對(duì)單片機(jī)異常
    的頭像 發(fā)表于 10-17 17:56 ?4220次閱讀

    【AI技術(shù)支持】ESP32-S3芯片重復(fù)異常復(fù)位問(wèn)題處理

    啟明云端/01問(wèn)題描述客戶在掃碼槍產(chǎn)品中使用ESP32-S3芯片,ESP-IDF版本為idf5.1.0時(shí),產(chǎn)品上電后一直處于異常復(fù)位復(fù)位提示原因
    的頭像 發(fā)表于 01-17 18:08 ?2973次閱讀
    【AI技術(shù)支持】ESP32-S3<b class='flag-5'>芯片</b>重復(fù)<b class='flag-5'>異常</b><b class='flag-5'>復(fù)位</b>問(wèn)題處理