會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





程式執行時,暫存器被清除的問題
新會員
註冊日期:
2月17日 10:44:19
所屬群組:
註冊會員
文章: 6
等級: 1; EXP: 47
HP : 0 / 11
MP : 2 / 13
離線
想請教大家一下,我是用PICFJ128FGA系列的,目前寫了一支程式,平常10秒做一次uart read & write ,再去做數值的判斷,但有遇到一個奇怪問題,當我執行約幾十分後,會發現我一些用結構體包的暫存器數值會被清為0,因之前沒遇過,所以有什麼方向可以去抓這問題嗎?謝謝

附加檔案:



jpg  111.jpg (113.03 KB)
76598_5ecf569e72d29.jpg 1312X437 px

jpg  2222.jpg (102.30 KB)
76598_5ecf56a7109a9.jpg 1312X437 px

5月28日 14:14:36
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
資深會員
註冊日期:
2010/07/12 16:45
來自 台灣的某一個角落
所屬群組:
註冊會員
文章: 273
等級: 15; EXP: 45
HP : 0 / 361
MP : 91 / 10563
離線
你的111那張圖上面框的全部變數都是0
2222那張圖 上面的框全部變數也都是0
旁觀者如何知道你的程式碼
是如何把這些全部清為0

一頭霧水中

5月28日 14:47:58
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15080
等級: 73; EXP: 95
HP : 1094 / 1823
MP : 5026 / 86330
離線
感覺起來好像是指標不受控制去改了資料。
你有用除錯器嗎? 你的問題應該可以用 PK3 設定斷點的次數或監視資料被改變時將程式停下來分析一下。

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

附加檔案:



jpg  擷取.JPG (73.51 KB)
16_5ecf603ae7ffa.jpg 794X556 px

jpg  擷取1.jpg (94.82 KB)
16_5ecf60877e212.jpg 787X556 px

5月28日 14:54:50
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
新會員
註冊日期:
2月17日 10:44:19
所屬群組:
註冊會員
文章: 6
等級: 1; EXP: 47
HP : 0 / 11
MP : 2 / 13
離線
不好意思,貼錯圖了!更新一下

附加檔案:



jpg  111.jpg (107.16 KB)
76598_5ecf621902d43.jpg 1312X437 px

5月28日 15:03:23
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
資深會員
註冊日期:
2010/07/12 16:45
來自 台灣的某一個角落
所屬群組:
註冊會員
文章: 273
等級: 15; EXP: 45
HP : 0 / 361
MP : 91 / 10563
離線
試著把結構的宣告成const
宣告成const 就是常數,程式運行中不會被更改。
不過建議你還是查出哪裡會把它清為0,使用Ryang建議的方法去找。


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

以上,請參考。

5月28日 15:24:14
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
新會員
註冊日期:
2月17日 10:44:19
所屬群組:
註冊會員
文章: 6
等級: 1; EXP: 47
HP : 0 / 11
MP : 2 / 13
離線
我有用你的方法去設定斷點條件,當中斷產生時,我有去看暫存器值也變為0,但程式斷點的地方,也與這暫存器無關!真是奇怪!

附加檔案:



jpg  333.jpg (107.92 KB)
76598_5ed0b1ea2a9f0.jpg 1312X553 px

5月29日 14:56:06
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15080
等級: 73; EXP: 95
HP : 1094 / 1823
MP : 5026 / 86330
離線
採用斷點方式除錯須注意的是: 因為是管狀式的存取架構所以 PC 的抓取會比程式的執行多一個位址。所以斷點停在設定位址,但程式是執行可能是上一個敘述,變數還沒改變到。

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

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

6月01日 12:15:28
轉換PDF檔 列印


Re: 程式執行時,暫存器被清除的問題
新會員
註冊日期:
2月17日 10:44:19
所屬群組:
註冊會員
文章: 6
等級: 1; EXP: 47
HP : 0 / 11
MP : 2 / 13
離線
我又搞錯圖了,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,
請問,這種問題大部份題如何引起的

6月02日 11:43:15
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project