關(guān)于調(diào)試STM32程序時(shí),某些標(biāo)志位被調(diào)試軟件意外清除的問(wèn)題
很多朋友都碰到過(guò)這樣的問(wèn)題:在單步調(diào)試時(shí)始終不能在顯示窗口看到某些標(biāo)志位的變化,應(yīng)該設(shè)置這些標(biāo)志位的時(shí)候,窗口中卻顯示為0,不少人都錯(cuò)誤地認(rèn)為這是芯片的問(wèn)題。
我們知道,不少STM32外設(shè)的狀態(tài)寄存器位,可以通過(guò)對(duì)某些寄存器的讀操作而清除(例如I2C的I2C_SR1中的很多標(biāo)志位),在調(diào)試過(guò)程中,每當(dāng)程序停止在設(shè)置的斷點(diǎn)或單步停止時(shí),調(diào)試軟件都會(huì)自動(dòng)地讀出所有指定的寄存器和存儲(chǔ)器中的內(nèi)容,并刷新窗口的顯示,調(diào)試軟件的這個(gè)讀操作恰好清除了那些標(biāo)志位,造成了上面描述的現(xiàn)象。
有幾個(gè)簡(jiǎn)單的辦法解決這個(gè)問(wèn)題:
1)關(guān)閉寄存器或存儲(chǔ)器顯示窗口
2)在寄存器或存儲(chǔ)器顯示窗口中不顯示這些敏感的寄存器
3)不要把斷點(diǎn)放在對(duì)這些敏感的寄存器位操作的前面,以保證這些寄存器位不被調(diào)試軟件意外地操作。
4)看官自己添加~~~~~
評(píng)論