CCS進行debug停止後不斷電程式仍然可以執行
最近開發一個專案,使用CCS進行編譯和debug,發現debug的一個問題,這個會導致我們誤判,比如我遇到的問題:
描述:
我在除錯TDA4x的內建mcu,外面掛了一個NorFlash,我在除錯這個Flash的擦除、讀和寫功能,但是突然發現出現了掉電之後不儲存的問題,這就讓我納悶了,命名在debug的時候看到Flash地址已經寫進去值了,而且也可以讀出來,但是停止debug然後斷電,再繼續debug的時候發現那塊地址寫入的資料都沒儲存,尷尬。。。
分析:
經過漫長的除錯,而且諮詢了供應商,還是沒有得到解決,然後在一個陽光明媚的下午,突然我想到了一個問題,是和我的操作有關,可能是這個問題導致的,然後開始驗證這個想法,果然是這個問題導致的,這個問題對我映像很深刻,所以就想記錄下來。
操作:
編譯 ->上電debug ->執行case ->停止debug ->斷電
對操作分析:
上述操作咋一看沒啥問題,但是我忽略了一個問題,CCS在debug介面按了停止按鈕之後,如果不斷電的話程式會繼續執行,就是在“停止debug ->斷電”這個步驟間會有個幾秒的時間,這幾秒會繼續執行程式。
測試case分析:
如下是我的測試case,先擦除,然後寫,最後讀,這個case是放在一個週期任務中執行的,那麼按照我的操作,在讀操作完之後我將debug停止,然後再斷電,這個過程中還會執行程式,而這個case是週期執行的,所以它有很大概率就會跑到擦除這一步,因為我擦除的大小是0x100000,需要幾秒鐘的時間,正好這個操作的間隔也是幾秒,所以就會把我debug寫入的資料都擦除掉,所以我再次上電看到的現象就是寫入的資料沒了,即掉電不儲存。
改進操作:
編譯 ->上電debug ->執行case ->斷電 ->停止debug
我操作改為,寫完資料並讀取成功後,先斷電,然後按停止debug的按鈕,然後再次上電看寫入的資料,果然是有的,經過多次測試,完全沒問題,問題解決,被自己坑了,尷尬。。。
如果看了這個記錄對你有幫助的話請點個贊鼓勵一下呀!!!