Browsing this Thread:
1 Anonymous Users
|
Re: bootloader 及 endapplication 的 JUMP 問題
|
|
版主
Joined
: 2004/4/30 10:53 最後登入時間
: 2021/11/30 18:11
From CAE, Microchip
Group:
站務管理者 註冊會員
Level : 75 HP : 744 / 1861 MP : 5367 / 108300 EXP : 45
|
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
|
|
|
bootloader 及 endapplication 的 JUMP 問題
|
|
初級會員
Joined
: 2020/1/13 17:42 最後登入時間
: 3/1 8:57
Group:
註冊會員
Level : 5 HP : 0 / 100 MP : 13 / 1238 EXP : 2
|
您好.
我在 endapplication 中會設定某個GPIO為High, jump 回 bootloader , 這個GPIO 要維持為High, 請問有什麼方式可做到??
我在endapplication 中 asm ("pagesel " str(0x05)); asm ("goto " str(0x05)); 可跳回 bootloader , 但GPIO 似乎會被重新 Initial 而變回LOW...
請問 goto 回bootloader 是不是 PIN 都會被initial? 是不是 PIN 都會被initial? RAM 也會被清為初始狀態?
發表於: 2020/6/19 17:03
|
|
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.