Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
資深會員
|
你的111那張圖上面框的全部變數都是0
2222那張圖 上面的框全部變數也都是0 旁觀者如何知道你的程式碼 是如何把這些全部清為0 一頭霧水中
發表於: 2020/5/28 14:47
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
版主
|
感覺起來好像是指標不受控制去改了資料。
你有用除錯器嗎? 你的問題應該可以用 PK3 設定斷點的次數或監視資料被改變時將程式停下來分析一下。 底下的貼圖是來自 PIC101 的教育訓練,利用斷點 Pass Counter 及圖二的 Data match 時的暫停等方式來分析錯誤所在。 Attach file: (0.00 KB) (0.00 KB)
發表於: 2020/5/28 14:54
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
新會員
|
不好意思,貼錯圖了!更新一下
Attach file: (0.00 KB)
發表於: 2020/5/28 15:03
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
資深會員
|
試著把結構的宣告成const
宣告成const 就是常數,程式運行中不會被更改。 不過建議你還是查出哪裡會把它清為0,使用Ryang建議的方法去找。 宣告常數結構類似這樣 const struct { unsigned char PA; unsigned char PB; }parameter ={1,2}; 以上,請參考。
發表於: 2020/5/28 15:24
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
新會員
|
我有用你的方法去設定斷點條件,當中斷產生時,我有去看暫存器值也變為0,但程式斷點的地方,也與這暫存器無關!真是奇怪!
Attach file: (0.00 KB)
發表於: 2020/5/29 14:56
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
版主
|
採用斷點方式除錯須注意的是: 因為是管狀式的存取架構所以 PC 的抓取會比程式的執行多一個位址。所以斷點停在設定位址,但程式是執行可能是上一個敘述,變數還沒改變到。
不建議將斷點設在 for 迴圈上,一般建議加入 nop( ) 的敘述並將斷點設在 nop 上以避免資料的誤判。 我看到的變數 CH_NUM 其位址在 0x914,資料數值為 0x03,並不是你說的變成 0。
發表於: 2020/6/1 12:15
|
|||
|
Re: 程式執行時,暫存器被清除的問題
|
||||
---|---|---|---|---|
新會員
|
我又搞錯圖了,XD
但數值確實是被清除為0, 我斷點是設定CH_NUM 數值有被寫入時,才會中斷! 而中斷時剛好停留在FOR迴圈上! 目前先把那些暫存器不要用結構式的寫法,值就沒有被清為0的問題 但又遇到別一個問題! 當程式執行一段幾十分鐘後,會跳到這程式,然後就卡住了 void __attribute__((naked, noreturn, weak)) TRAPS_halt_on_error(uint16_t code) { TRAPS_error_code = code; #ifdef __DEBUG __builtin_software_breakpoint(); /* If we are in debug mode, cause a software breakpoint in the debugger */ #endif while(1); } TRAPS_error_code 這數值等於2, 請問,這種問題大部份題如何引起的
發表於: 2020/6/2 11:43
|
|||
|