Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
|
||||
---|---|---|---|---|
版主
|
如果是使用 MCC 所產生的 Bootloader 可以在 MCC 裡直接設定 APP 應用程式的起始位址。
Bootloader 的 APP 程式起始位置是可以設定的,如你的 APP 是從 0x2000 開始,那 Bootloader 的中斷向量轉移就必須在 0x0008 及 0x0018 這兩個中斷執行位址利用 goto 轉移到 0x2008 及 0x2018 這兩個位址來讓 APP 執行中斷函式。 至於 APP 就需要在 Linker 設定裡講整個程式在位移到 0x2000 的起始位址,可以用 Code Offset = 0x2000 的設定將 APP 的編譯從 0x2000 開始編譯。並在 0x2008 及 0x2018 利用嵌入式組語方式跳到高優先權及低優先權中斷函式。 底下是一個中斷轉移的範例程式參考看看:
#include <xc.h>
發表於: 2020/6/15 10:24
Edited by Ryang on 2020年06月15日 10:41:46
Edited by Ryang on 2020年06月15日 11:17:47 |
|||
|
Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
|
||||
---|---|---|---|---|
新會員
|
HI Sir:
你好 先把名詞定義一下 BOOT = BOOTLOADER (0x0000~0x1FFF) APP = 主程式(0x2000~0x7FFF) 我在BOOT中也有用到中斷副程式 因為沒有額外的設定,所以他應該是直接用了 0x0008和0x0018這兩個中斷向量 但我在跳到APP時,APP的中斷也會跳到BOOT的中斷 我想請教的是我們如何在BOOT跳到APP之後 讓APP執行他自己的中斷副程式 您幫我整理的這兩段CODE,請問這是要放在BOOT中嗎? 感覺是要放在BOOTLOADER中,讓他跳到0x2008和0x2018 但這樣原本BOOT的中斷副程式怎麼辦呢? 抱歉這部分我不是很清楚,還望不吝指導 謝謝
發表於: 2020/6/15 11:18
|
|||
|
Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
|
||||
---|---|---|---|---|
版主
|
1. 在 Bootloader 程式裡,0x0001 及 0x0018 的中斷進入為址必須填入 goto 0x2008 及 goto 0x2018 的指令。如果你是用 MCC 來產生的 Bootloader 則可以在 MCC 下直接設定 APP 中斷的執行位址。如圖一所示:
2. 上面所附的範例程式是用在 APP 端的中斷程式。第一階段是在程式位址 0x2008 的地方強行遷入一個 goto HighISR 的組合語言。 #asm goto HighISR #endasm 而void interrupt HighISR(void) 是宣告一個高優先權中斷函數,函數名稱為 HighISR( ) 以接收在 0x2008 跳過來的執行。 所以你的 Bootloader 與 APP 的關係是: APP 發生中斷後,程式跳入Bootloader 的 0x0008 處執行高優先權中斷。又因此處放了 goto 0x2008 的指令,所以又會跳轉到 APP 的 0x2008 位址執行在跳到 APP 的中斷函數 HighISR( ) 執行中斷程式。 Attach file: (0.00 KB)
發表於: 2020/6/15 11:28
|
|||
|