Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
初級會員
|
參照:
Hello, 有的, 上述的加載 Bootloader.h 就是透過 MPLAB X IDE 做的(編譯結合與燒錄) 然後我有再測試將 APP.h 透過 Bootloader 去寫入 OTA 區塊, 會得到同樣異常的結果
發表於: 2021/8/18 13:10
|
|||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
資深會員
|
建議您先將Bootloader + OTA 應用程式透過MPLAB X IDE -> Loadable功能將兩個專案的hex file合併後燒錄到MCU, 看是否可以正常運作.
p.s.: 先撇開Bootloader燒錄OTA區塊後是否正常的問題
發表於: 2021/8/18 12:44
|
|||
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
|
||||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
初級會員
|
參照:
Hello, 感謝回覆 可以確定, 因為我有在 APP 額外加燈號測試, 確實有進 0x10000 且有繼續往下執行一小部份 甚至都透過燈號知道執行到哪邊就會異常 我將那行程式註解掉, 重新編譯執行, 它就在註解掉的下一行會異常 而且不管下一行是不是副程式或簡單的 if 判斷式都會異常, 就算在 APP 開頭將中斷全關掉, 也不能正常跑完開頭不需要進中斷的那部份程式 我寫一個簡單新的 APP,功能是由 Timer 2 每 0.1 秒中斷反向 Led 這個新 APP.h + 相同 Bootloader.h 在 0x1000 能正常, 偏移改 0x10000 也正常能閃燈 原本的 APP 是比較大, 但也不過佔用全部不到 1/4 的 PFM
發表於: 2021/8/18 12:34
|
|||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
資深會員
|
可以麻煩確認一下透過Bootloader來更新OTA區 : 0x10000 ~ 0x1FFFF之後, 可以透過Target Memory View比對一下MCU的OTA區的flash內容與 OTA區的hex file內容是否相同.
如果燒錄不完整或是不正確, 即使有跳轉到OTA應用程式, 接下來也可能會動作異常.
發表於: 2021/8/18 12:33
|
|||
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
|
||||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
版主
|
可以確定一下 Bootloader 執行完後,程式的控制權有交到你的 AP 程式並且是從你所設定的 0x10000 位址開始執行程式?
發表於: 2021/8/18 12:07
|
|||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
初級會員
|
參照:
Hello, 感謝回覆 我上面有說了喔, 我有重新定定義偏移重置位置, 也包含兩區各自的中斷偏移位置 這些都在 Bootloader 裡面有設置好了 而且程式有由 Bootloader 運作移交給 0x10000 (更新區的起始) 並往下執行一小段程式 這一小段程式其實也沒有進中斷, 就算我關掉 GIE 等也是一樣異常
發表於: 2021/8/18 11:46
|
|||
|
Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
資深會員
|
Hello,
在Bootloader程式的起始要將中斷向量重新對映到應用程式的新位址, 請參考下面程式. asm ("psect intcode,global,reloc=2,class=CODE,delta=1"); asm ("GOTO 0x10008"); asm ("psect intcodelo,global,reloc=2,class=CODE,delta=1"); asm ("GOTO 0x10018");
發表於: 2021/8/18 11:34
|
|||
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
|
||||
|
無關中斷,使用 Codeoffset 會使程式運作不正常
|
||||
---|---|---|---|---|
初級會員
|
大家好!
有關於 Codeoffset 問題需要幫忙。 OS : Windows 10, Administrator 帳戶 MCU PIC18F27Q10, MPLAB X IDE V5.5, XC8 V2.32, Packs PIC18F-Q_DFP (1.11.185) 架構為 出廠燒錄程式 : 0x1000 ~ 0xFFFF (Vector Reset 0x1000, Interrutp 0x1008 & 0x1018) OTA 更新區 : 0x10000 ~ 0x1FFFF (Vector Reset 0x10000, Interrutp 0x10008 & 0x10018) 將寫好的 APP.h 使用 MPLAB X IDE 加載 Bootloader.h, 預設進入出廠程式區 設置細節 : Codeoffset 0x1000 & ROM Ranges 1000-FFFF 編譯燒錄完成後, 有開機閃爍燈號且所有功能正常 將相同 APP.h 加載 Bootloader.h, 預設進入更新程式區 設置細節 : Codeoffset 0x10000 (ROM Ranges 10000-1FFFF 有無設置都試過) 編譯燒錄完成後, 有開機但無閃爍燈號, 功能完全不正常 即使我透過 Bootloader 寫入更新程式區也得到同樣異常的結果 我透過埋入燈號確認程式跑到更新程式區之後運作沒多少行就 "沒繼續往下運作(表面上看)" 程式運作到該處之後沒有發生中斷也沒有 Reset (不知有無跳轉到什麼地方去) 檢查 Target Memory Views > Program Memory 分佈沒看到異常 Bootloader 分佈在 0 ~ 0xFFF, 0x1000~0xFFFF 都是 FF, APP.h 放在 0x10000 開始 我換別顆相同 MCU 也是得到異常結果 請教為何相同程式且一樣的操作, 差別只有 Codeoffset 由 0x1000 設為 0x10000, 會異常?
發表於: 2021/8/18 9:49
|
|||
|