娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月14日(星期六)

2019年06月14日 | stm32重啟調試筆記

發布者:火箭少年 來源: eefocus關鍵字:stm32  重啟  調試筆記 手機看文章 掃描二維碼
隨時隨地手機看文章

#stm32重啟調試筆記

本文章主要解決在使用stm32+ucos進行嵌入式軟件開發中遇到的系統重啟現象查找與解決。


1 、重啟原因

系統重啟又多種可能:1、看門狗中斷;2、內存泄漏;3、軟件重啟。

首先看一下stm32的手冊關于系統重啟的狀態寄存器,其中詳細的記錄了幾個系統重啟的原因(低功耗復位標志、窗口看門狗復位標志、)


寄存器詳細信息:


在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

    查看寄存器值

    a:通過debug查看,在代碼進入main函數時加入斷電,通過查看RCC寄存器值可以明了的查看相關狀態


    在這里插入圖片描述


    b:在查看之后應該清除中斷信息,這樣下次重啟時才能知道重啟原因。加入下面一條語句。


    /*打印中斷標志字*/

    void print_reboot_flag(void)

    {

    printf("reboot flag :0x%04Xrn",RCC->CSR); //

    /*判斷并打印重啟原因*/

    if(RCC->CSR & 1<<31){

    printf("reboot error:Low-power!rn"); //低功耗管理

    }else if(RCC->CSR & 1<<30){

    printf("reboot error:Window watchdog!rn"); //窗口看門狗

    }else if(RCC->CSR & 1<<29){

    printf("reboot error:Independent watchdog!rn"); //獨立看門狗

    }else if(RCC->CSR & 1<<28){

    printf("reboot error:Software!rn"); //軟件復位

    }else if(RCC->CSR & 1<<27){

    printf("reboot error:POR/PDR!rn"); //por/pdr復位

    }else if(RCC->CSR & 1<<26){

    printf("reboot error:PIN!rn"); //NRST引腳復位

    }else if(RCC->CSR & 1<<25){

    printf("reboot error:BOR!rn"); //軟件寫入RMVF位清零

    }

    }

    /*清除中斷標志字*/

    void clear_reboot_flag(void)

    {

    RCC->CSR |= 1<<24; //清除

    }

    /*printf()函數位相應的打印輸出定向函數*/



    2、重啟問題解決

    重啟原因找到了,下面就是解決重啟問題,上面標識的重啟原因基本是比較容易解決的。


    看門狗重啟


    出現看門狗異常可能性比較多,程序運行正常軟件喂狗超時,這種情況最好解決,查看喂狗時間可軟甲是否有超時的。

    還有一種情況是內存溢出這種問題是作為C/C++程序員來說是最為頭痛的問題。下面單獨講一講出現這種現象是應該向哪個方向去查找。


    內存溢出越界訪問


    內存溢出也就是會出現程序跑飛,在stm32中常常會出現HardFault_Handler中斷,這種異常也是有兩種可能。


    a 有規律的異常HardFault_Handler中斷,這種相對而言是比較容易發現的。比如下面一段代碼


      int main(void)

      { 

      uint8_t *str;

      while(1)

      {

      *str++ = 1; 

      }

      }


    在代碼中我們對位分配內存的指針進行了操作,程序運行我們將斷電放在HardFault_Handler中斷中,


      void HardFault_Handler(void)

      {

        /* Go to infinite loop when Hard Fault exception occurs */

        while (1) //在此處加斷電

        {

        }

      }


    程序會卡死在斷點處。


    1)

    通過下面圖片顯示的,在Call Stack中查看在什么地方出現了異常。使用"Show Caller Code"查看相關代碼,同時通過查看此處的相關的數據。


    在這里插入圖片描述

    在這里插入圖片描述
    在這里插入圖片描述

    2)

    通過查看芯片寄存器來手動查找出現異常的代碼位置


    首先查看R14(LR)寄存器

    0xFFFFFFF9對應的是要看MSP寄存器

    0xFFFFFFFD對應的是要看PSP寄存器

    然后對應的通過 MSP或者PSP的寄存器值,在Memory中查到運行地址,然后在Disassembly中查找地址位置。


    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述

    b

    在出現不規律的重啟現象是就比較讓人捉急了,此處記錄一下個人在開發中遇到的幾個重啟問題。


    重啟的情況


    1、函數內部變量過多使棧內存溢出,這種情況需要增加棧大小heap,在startup_xxx.s文件中。


      Heap_Size       EQU     0x00000200

    1

    2、帶任務的工程項目中也可能是出現了堆棧溢出,這種情況可以通過打印free堆棧來進行查看是否已經溢出。


    結束


    關鍵字:stm32  重啟  調試筆記 引用地址:stm32重啟調試筆記

    上一篇:STM32開發筆記57: 復位電路設計
    下一篇:STM32程序軟件復位

    推薦閱讀

    13日,2018亞洲消費電子展(CES Aisa 2018)在上海新國際博覽中心正式開幕啦!記者在現場深深地感受到了啥叫人工智能盛宴。本土傳統家電廠商占據N1、N2館,帶來很多智能家居場景應用,海爾、海信、TCL、長虹等廠商已經將AI搬到了家居產品中。電視、冰箱、洗衣機、空調、掃地機器人、窗簾、插座、開關、門鎖一些列的家居產品統統智能化。記者剛沉浸在未來...
    機器人執行完成肺癌切除手術據北青網報道,12日,廈門大學附屬第一醫院院長姜杰教授、胸外科于修義主任用達芬奇機器人給一位患者做了肺癌切除手術。在手術中,醫生先在患者的胸部開了3個不到1厘米寬的操作孔、1個約3厘米的輔助操作口,再將機器人的機械臂放置在胸腔內,人體胸腔通過攝像頭形成的三維影像可以被放大10-15倍。姜杰教授坐在操縱臺上,通過控...
    國微集團首席科學家聘請儀式于國實大廈23樓報告廳隆重舉行,中國科學院院士郝躍教授正式受聘成為國微集團首席科學家。西安電子科技大學微電子學院院長張玉明、CAD所副主任初秀琴、西電國微研究院副院長游海龍,國微集團董事長黃學良、總裁帥紅宇以及集團管理層代表一同出席聘請儀式。黃學良董事長代表國微集團對郝躍院士的加盟表示熱烈歡迎,對郝躍院士一...
    據外媒報道,功率電子器件技術領導者Eggtronic宣布,推出混合無線交流電源專利技術E2WATT,可同時作為交流電源和高速無線傳輸系統中的發射器,從而確保能量效率和能量傳輸距離,但其成本低于傳統無線技術。(圖片來源:eetimes)傳統Qi無線設備的傳輸距離通常為5mm,最大傳輸功率通常最高為30W。E2WATT技術可在超過其6倍的距離(可達40mm)內,提供高達300...

    史海拾趣

    小廣播
    設計資源 培訓 開發板 精華推薦

    最新單片機文章
    何立民專欄 單片機及嵌入式寶典

    北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

     
    EEWorld訂閱號

     
    EEWorld服務號

     
    汽車開發圈

     
    機器人開發圈

    電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    主站蜘蛛池模板: 桃源县| 绿春县| 康马县| 卢龙县| 宁波市| 黄龙县| 新竹县| 青海省| 渝北区| 延川县| 景泰县| 湖北省| 惠州市| 华坪县| 正定县| 罗山县| 贡嘎县| 麦盖提县| 密云县| 青州市| 樟树市| 连江县| 泉州市| 宿松县| 会昌县| 永春县| 新乐市| 东乌| 神木县| 扶绥县| 廉江市| 长寿区| 汾阳市| 康保县| 峨山| 兴海县| 永兴县| 桂林市| 新泰市| 墨玉县| 湘潭市|