→ ksmrt0123:看不太懂細節, 不過keil在main()之前會改到xdata應該是 01/05 18:02
→ ksmrt0123:(1)正常變數初始化, 如 char c = 'a'; 或是 01/05 18:04
→ ksmrt0123:(2) startup.a51 中設定將xdata變數清為0 01/05 18:06
→ ksmrt0123:進debug mode後, 開disassembly window再按一下RST應該 01/05 18:07
→ ksmrt0123:可讓PC回到C:0x0000, 再single step慢慢看就可看到到底 01/05 18:09
→ ksmrt0123:是那邊改到 01/05 18:09
感謝k大的賜教,不過似乎不是這樣的問題,startup.a51我沒有去動過
也沒有初始化數值。
一進入debug模式時,還沒讓他跑,
程式的前半段已經不知在何時跑過,但程式的後半段沒有跑
deubg的指標是指向程式的最前端main()的部份
由於我寫的程式有關於reset的設計,他如果跑到一半,斷掉從頭跑
那我程式從頭開始執行,會跳到後半段開始跑,而不會整個從頭跑,因而出錯
我的問題是:「為什麼ctrl+f5進入debug模式,還沒讓程式開始跑時,
程式的前半段已經被偷偷執行過了呢?」
希望這樣講得比較有條理,希望能得到解答!
※ 編輯: ihady 來自: 114.32.216.166 (01/06 16:13)
推 ksmrt0123:進debug mode後按一下RST (Peripherals下的Reset CPU) 01/06 18:27
→ ksmrt0123:應可讓PC(你說的deubg的指標)回到 C:0x0000, 01/06 18:28
→ ksmrt0123:然後再single step就可看到執行到main()前發生了什麼事 01/06 18:29
→ ihady:是的k大,但指標指向0x000前、deubg前、程式執行前, 01/06 18:35
→ ihady:ex-memory已經是被前半段程式執行過的樣子了@@ 01/06 18:35
→ ihady:而debug模式下,一行一行跑的程式,功能沒有問題 01/06 18:36
推 ksmrt0123:keil不會無緣無故把xdata填成前半段程式執行過的樣子 01/08 01:58
→ ksmrt0123:不是程式初始化就是那樣, 不然就是程式執行過 01/08 01:59
→ ksmrt0123:你可試reset後手動把xdata相關部分全填成0 01/08 02:00
→ ksmrt0123:然後讓程式執行到main()的開頭看看xdata有沒有變化 01/08 02:02
→ ksmrt0123:有的話就是程式(變數)初始化做的 01/08 02:02