我在兩個目標(一個飛思卡爾,一個STM32和皮質M4)上編譯「相同」代碼。我使用--specs=nano.specs
,並且我已經實現了_write
函數作爲空函數,並且這導致整個printf
被GCC的-Wno-unused-function
優化,即使STM32目標上的-O0
(參見地圖)。這很好,我想重現一下飛思卡爾的目標。嵌入式newlib-nano printf會導致硬件故障
但是,在飛思卡爾目標(具有相同的編譯標誌)printf會導致硬故障。但是如果我一步一步地使用調試器(程序集步進),printf
會在沒有硬性錯誤的情況下通過庫。簡單斷點斷點有時不能在printf
中的任何位置命中和運行,也會導致硬錯誤(因此它不太可能是外設問題)。
到目前爲止,我檢查堆棧和堆不重疊和其他一些牽強拆卸。
爲什麼printf優化不在freescale目標上? 什麼可以導致庫代碼hardfault? 爲什麼在進行組裝一步一步的調試時可以嗎?
編輯:
- 採用ARM-無 - EABI - 海合會兩個MCU具有相同的庫5.4.1。
- 我不想刪除printf,這只是第一步能夠使用 他們與否。
- 矢量表有默認弱向量所有ISR所以應該OK
- 使用register dump似乎出現故障的指令是在地址4(復位向量),所以現在新的問題是:爲什麼芯片復位?
問題在其他地方是100%。 –
@ PeterJ_01這正是我需要解決這個問題的原因,因爲我不知道其他地方會發生什麼。您的評論可以更有用嗎? – Julien
不幸的是,如果沒有實際的軟件和硬件,DH很難進行診斷。我擔心這是不可能的。使用我的水晶球 - 我賭矢量表的問題 - 沒有正確初始化或某些向量拖欠DH。當你使用調試器中斷時沒有觸發。當你運行程序「正常」的方式觸發。也許定時器,也許systick,也許別的東西。你有兩個不同的初創公司 - 需要自己看看。我知道我寫了什麼。如果是100%在別的地方。 –