Re: bootloader 及 endapplication 的 JUMP 問題
|
||||
---|---|---|---|---|
版主
|
I/O 在 Bootloader 被改變,有可能是執行了 C 的初始程式將接腳設回輸入功能。
在 C 裡面有一個用於變數的保留字 "persistent" 可以防止 C 的初始程式去改變其內容或清零。不過 persistent 的宣告我沒用在I/O的設定上。 persistent – 為一個特殊的保留字,用來告訴編譯器該變數在重新啟動時(startup)無須被清除為零。一般而言,使用此方式所宣告的變數會被存放在另外的節區。 建議可以使用 PK3 等除錯工具使用 Data 的 Pass Counter 去 trace 該腳位的位準變化停下程式的執行。檢查從應用程式跳回 Bootloader 後在哪裡被清零了。找出這一段程式後在 Bootloader 中加入一個冷開機或是熱開機的判斷來決定 Bootloader 初始程式的執行。 關於除錯的一些方法可以參考一下教育訓練教材: PIC101 裡的 Page 102 的說明。如貼圖: 一般從 APP 要跳回 Bootloader 的 0x0000 可以用 Reset 的指令,這樣會比較有完整的重置 Bootloader,萬一堆疊沒有歸零的話用此方式可將堆疊歸零,I/O 回到初始的設定。 Attach file: (0.00 KB)
發表於: 2020/6/22 12:50
|
|||
|