[問題] keil code於main()之前偷跑

看板ASM (組合語言)作者 (艾和狄)時間13年前 (2012/01/04 19:28), 編輯推噓2(2015)
留言17則, 2人參與, 最新討論串1/1
各位大大好,是這樣的, 我目前一個「測試watchdog」且「紀錄於外部記憶體」的程式 由於watchdog會測到reset,因此我用外部記憶體紀錄,現在跑到哪一步驟 但keil在編譯、download過程中,似乎會偷偷去執行某一部份程式碼 每次ctrl+f5編譯完進入debug模式時,外部記憶體已然動過了 很明顯是被我寫的程式給動過,且動到一半就跳出,跳到main()去的樣 run to main()選項有沒有勾選,都會有這樣的情形發生 細節:外部記憶體主要兩區:password與step password正確就代表測試程式執行中,step代表測試到第幾步 password不正確,就會輸入password且把step歸1 每次ctrl+f5編譯完,password已經紀錄了, 但step跑到5、6步,紀錄的結果也是充滿錯誤。 此時讓程式由main()開始跑就一定得不到正確結果。 當然手動把pass跟step歸零、讓程式從main()跑到尾會是正確的 這樣會導致我寫的程式執行錯誤 請問有沒有方法可以解決呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.216.166

01/05 18:02, , 1F
看不太懂細節, 不過keil在main()之前會改到xdata應該是
01/05 18:02, 1F

01/05 18:04, , 2F
(1)正常變數初始化, 如 char c = 'a'; 或是
01/05 18:04, 2F

01/05 18:06, , 3F
(2) startup.a51 中設定將xdata變數清為0
01/05 18:06, 3F

01/05 18:07, , 4F
進debug mode後, 開disassembly window再按一下RST應該
01/05 18:07, 4F

01/05 18:09, , 5F
可讓PC回到C:0x0000, 再single step慢慢看就可看到到底
01/05 18:09, 5F

01/05 18:09, , 6F
是那邊改到
01/05 18:09, 6F
感謝k大的賜教,不過似乎不是這樣的問題,startup.a51我沒有去動過 也沒有初始化數值。 一進入debug模式時,還沒讓他跑, 程式的前半段已經不知在何時跑過,但程式的後半段沒有跑 deubg的指標是指向程式的最前端main()的部份 由於我寫的程式有關於reset的設計,他如果跑到一半,斷掉從頭跑 那我程式從頭開始執行,會跳到後半段開始跑,而不會整個從頭跑,因而出錯 我的問題是:「為什麼ctrl+f5進入debug模式,還沒讓程式開始跑時, 程式的前半段已經被偷偷執行過了呢?」 希望這樣講得比較有條理,希望能得到解答! ※ 編輯: ihady 來自: 114.32.216.166 (01/06 16:13)

01/06 18:27, , 7F
進debug mode後按一下RST (Peripherals下的Reset CPU)
01/06 18:27, 7F

01/06 18:28, , 8F
應可讓PC(你說的deubg的指標)回到 C:0x0000,
01/06 18:28, 8F

01/06 18:29, , 9F
然後再single step就可看到執行到main()前發生了什麼事
01/06 18:29, 9F

01/06 18:35, , 10F
是的k大,但指標指向0x000前、deubg前、程式執行前,
01/06 18:35, 10F

01/06 18:35, , 11F
ex-memory已經是被前半段程式執行過的樣子了@@
01/06 18:35, 11F

01/06 18:36, , 12F
而debug模式下,一行一行跑的程式,功能沒有問題
01/06 18:36, 12F

01/08 01:58, , 13F
keil不會無緣無故把xdata填成前半段程式執行過的樣子
01/08 01:58, 13F

01/08 01:59, , 14F
不是程式初始化就是那樣, 不然就是程式執行過
01/08 01:59, 14F

01/08 02:00, , 15F
你可試reset後手動把xdata相關部分全填成0
01/08 02:00, 15F

01/08 02:02, , 16F
然後讓程式執行到main()的開頭看看xdata有沒有變化
01/08 02:02, 16F

01/08 02:02, , 17F
有的話就是程式(變數)初始化做的
01/08 02:02, 17F
文章代碼(AID): #1F13VRbJ (ASM)
文章代碼(AID): #1F13VRbJ (ASM)