簡介
客戶在使用 STM32G474RE 進(jìn)行產(chǎn)品開發(fā)的時(shí)候,操作系統(tǒng)軟件使用了 RT-Thread5.0,同時(shí)由于要做 ClassB 認(rèn)證,所以在 RT-Thread 系統(tǒng)上,移植了 ClassB 2-3-0 版本安全庫。用戶程序另外一個(gè)功能是固件升級(jí),在調(diào)試固件升級(jí)程序的過程中,發(fā)現(xiàn)一旦執(zhí)行了ClassB 的啟動(dòng)自檢,就會(huì)出現(xiàn)固件升級(jí)失敗。調(diào)試發(fā)現(xiàn),固件升級(jí)失敗的原因是寫 Flash 的時(shí)候發(fā)現(xiàn) Flash 狀態(tài)寄存器的錯(cuò)誤標(biāo)志被置位,導(dǎo)致 Flash 寫操作失敗??蛻舾鶕?jù)現(xiàn)此象反饋 ClassB 的自檢代碼有隱患,導(dǎo)致 Flash 出錯(cuò)。本文分析了出現(xiàn)該錯(cuò)誤的原因以及解決辦法。
問題描述
根據(jù)客戶的問題反饋,我在 NUCLEO-G474RE 開發(fā)板上單獨(dú)移植 ClassB,通過調(diào)試,沒有發(fā)現(xiàn)類似問題。為了復(fù)現(xiàn)該問題,從 RT-Thread 官方網(wǎng)站上下載了 5.0 版本的 RTThread 代碼。RT-Thread 對(duì) STM32 的支持是相當(dāng)友好的,代碼中包含了對(duì)多數(shù) STM32開發(fā)板的支持,所以對(duì)于 NUCLEO-G474RE 開發(fā)板,只需要找到對(duì)應(yīng)的目錄,打開工程即可。
問題分析與解決
結(jié)合參考手冊對(duì) PGAERR 以及 PGSERR 的描述,只能從寫 Flash 的角度去分析問題產(chǎn)生的原因,最終通過單步調(diào)試,發(fā)現(xiàn)其中一句代碼導(dǎo)致了該錯(cuò)誤標(biāo)志位的置起。
小結(jié)
在 STM32 軟件開發(fā)中,不當(dāng)?shù)闹羔槻僮?,尤其使用未?jīng)初始化的指針可能會(huì)引起莫名奇妙的問題,所以在使用指針變量的時(shí)候,需要注意指針地址的正確性。