新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 編譯后不能運行的幾個原因

        STM32 編譯后不能運行的幾個原因

        作者: 時間:2016-11-21 來源:網絡 收藏
        一、編譯和鏈接都可以通過,但uVision MDK不能全速運行,一運行就停止了,原因在于Option->Target->Code Generation->Use MicroLIB 復選框沒有打鉤,一般來說,針對一運行就停止的情況,將Use MicroLIB勾選之后,重新編譯,運行就可以通過了。



        二、仿真調試時沒有問題,但通過JLink調試時出現(xiàn)如下提示:

        本文引用地址:http://www.104case.com/article/201611/319402.htm

        "Flash Download Failed-"Cortex-M3" ,則可能的原因是:Option->Debug->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm 或 Option->Utilities->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm沒有添加相應類型的芯片F(xiàn)LASH說明,一般在這兩個選項卡中分別點擊ADD,添加STM32F10x High-density Flash 即可。






        三、調試時,程序總是停止在LDR R0, =SystemInit 語句,原因如下:堆棧空間默認的太小

        默認startup_stm32f10x_hd.s中 Stack_Size EQU 0x00000400,如果改大之后,可能調試就可以正常運行。

        四、調試時,程序停止在HardFault_Handler的問題(引用網上的總結)

        最近調試UCGUI和UCOSII,程序莫名其妙的死掉了,用JLINK調試,發(fā)現(xiàn)進入了HardFault_Handler,主要

        原因有兩個,堆棧溢出和數(shù)組越界,很不幸的是這兩種情況都被我碰到了。
        第一次是用UCGUI在一個button上顯示文字,發(fā)現(xiàn)字符串顯示不全,只顯示第一個字符,在啟動文件

        startup_stm32f10x_md.s中修改“Stack_Size EQU 0x00000200”,將堆棧改大點,改為

        “Stack_Size EQU 0x00000400”后顯示正常。
        第二次是UCGUI和UCOSII聯(lián)合調試時,也進入了HardFault_Handler,這次原因是數(shù)組越界,在一個函數(shù)中

        定義了一個數(shù)組ya[10],定義了一個計數(shù)變量count,由于沒有初始化count,導致count的值一開始就大于數(shù)

        組邊界,導致數(shù)組越界,初始化count=0后,程序正常。

        我在調試的過程中,定義了兩個結構體的指針變量,然后對這兩個指針變量賦值,在執(zhí)行第一個賦值語句的時候,程序停止在HardFault_Handler,最后的解決辦法是將結構體的指針變量改為普通變量,賦值過程不再出現(xiàn)意外。



        關鍵詞: STM32編譯不能運

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 荣昌县| 博兴县| 兴隆县| 峡江县| 福清市| 股票| 吉安市| 镇巴县| 凉山| 赣州市| 建水县| 河津市| 乐安县| 灌云县| 台州市| 彭泽县| 汤阴县| 泗水县| 荣成市| 南皮县| 广德县| 义乌市| 孝义市| 宾川县| 孟津县| 乌拉特前旗| 泗洪县| 陵川县| 四川省| 五莲县| 怀仁县| 巴中市| 丹阳市| 武功县| 鸡东县| 芷江| 东乌珠穆沁旗| 忻城县| 南投县| 板桥市| 嫩江县|