• slider image 276
  • slider image 277
  • slider image 278
  • slider image 279
  • slider image 280
  • slider image 281
:::


Browsing this Thread:   1 Anonymous Users






程式執行時,暫存器被清除的問題
#1
新會員
新會員


查看用戶資訊
想請教大家一下,我是用PICFJ128FGA系列的,目前寫了一支程式,平常10秒做一次uart read & write ,再去做數值的判斷,但有遇到一個奇怪問題,當我執行約幾十分後,會發現我一些用結構體包的暫存器數值會被清為0,因之前沒遇過,所以有什麼方向可以去抓這問題嗎?謝謝

Attach file:



jpg  (0.00 KB)


jpg  (0.00 KB)


發表於: 2020/5/28 14:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#2
資深會員
資深會員


查看用戶資訊
你的111那張圖上面框的全部變數都是0
2222那張圖 上面的框全部變數也都是0
旁觀者如何知道你的程式碼
是如何把這些全部清為0

一頭霧水中

發表於: 2020/5/28 14:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#3
版主
版主


查看用戶資訊
感覺起來好像是指標不受控制去改了資料。
你有用除錯器嗎? 你的問題應該可以用 PK3 設定斷點的次數或監視資料被改變時將程式停下來分析一下。

底下的貼圖是來自 PIC101 的教育訓練,利用斷點 Pass Counter 及圖二的 Data match 時的暫停等方式來分析錯誤所在。

Attach file:



jpg  (0.00 KB)


jpg  (0.00 KB)


發表於: 2020/5/28 14:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#4
新會員
新會員


查看用戶資訊
不好意思,貼錯圖了!更新一下

Attach file:



jpg  (0.00 KB)


發表於: 2020/5/28 15:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#5
資深會員
資深會員


查看用戶資訊
試著把結構的宣告成const
宣告成const 就是常數,程式運行中不會被更改。
不過建議你還是查出哪裡會把它清為0,使用Ryang建議的方法去找。


宣告常數結構類似這樣
const struct
{
unsigned char PA;
unsigned char PB;
}parameter ={1,2};

以上,請參考。

發表於: 2020/5/28 15:24
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#6
新會員
新會員


查看用戶資訊
我有用你的方法去設定斷點條件,當中斷產生時,我有去看暫存器值也變為0,但程式斷點的地方,也與這暫存器無關!真是奇怪!

Attach file:



jpg  (0.00 KB)


發表於: 2020/5/29 14:56
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#7
版主
版主


查看用戶資訊
採用斷點方式除錯須注意的是: 因為是管狀式的存取架構所以 PC 的抓取會比程式的執行多一個位址。所以斷點停在設定位址,但程式是執行可能是上一個敘述,變數還沒改變到。

不建議將斷點設在 for 迴圈上,一般建議加入 nop( ) 的敘述並將斷點設在 nop 上以避免資料的誤判。

我看到的變數 CH_NUM 其位址在 0x914,資料數值為 0x03,並不是你說的變成 0。

發表於: 2020/6/1 12:15
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 程式執行時,暫存器被清除的問題
#8
新會員
新會員


查看用戶資訊
我又搞錯圖了,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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
[ more... ]

Microchip CAE 空中教室

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源