• slider image 325
  • slider image 326
  • slider image 327
  • slider image 328
  • slider image 329
  • slider image 330
:::


Browsing this Thread:   1 Anonymous Users




« 1 (2)


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#9
初級會員
初級會員


查看用戶資訊
參照:

GodBlessU wrote:
可以麻煩確認一下透過Bootloader來更新OTA區 : 0x10000 ~ 0x1FFFF之後, 可以透過Target Memory View比對一下MCU的OTA區的flash內容與 OTA區的hex file內容是否相同.

如果燒錄不完整或是不正確, 即使有跳轉到OTA應用程式, 接下來也可能會動作異常.


Hello,
透過 Target Memory Views 跟 Hex File 要人工比對的話
不管透過 IDE 結合編譯燒錄還是由 Bootloader
由於資料有大於 20K Bytes, 有點難度 0.0
我稍微比較頭尾是一致的

另外我燒錄不只一次, 也有換不同顆的 MCU, 應該不會次次都燒錄失敗或不完全

發表於: 8/18 13:21
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#8
初級會員
初級會員


查看用戶資訊
參照:

GodBlessU wrote:
建議您先將Bootloader + OTA 應用程式透過MPLAB X IDE -> Loadable功能將兩個專案的hex file合併後燒錄到MCU, 看是否可以正常運作.

p.s.: 先撇開Bootloader燒錄OTA區塊後是否正常的問題


Hello,
有的, 上述的加載 Bootloader.h 就是透過 MPLAB X IDE 做的(編譯結合與燒錄)
然後我有再測試將 APP.h 透過 Bootloader 去寫入 OTA 區塊, 會得到同樣異常的結果

發表於: 8/18 13:10
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#7
資深會員
資深會員


查看用戶資訊
建議您先將Bootloader + OTA 應用程式透過MPLAB X IDE -> Loadable功能將兩個專案的hex file合併後燒錄到MCU, 看是否可以正常運作.

p.s.: 先撇開Bootloader燒錄OTA區塊後是否正常的問題

發表於: 8/18 12:44
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#6
初級會員
初級會員


查看用戶資訊
參照:

Ryang wrote:
可以確定一下 Bootloader 執行完後,程式的控制權有交到你的 AP 程式並且是從你所設定的 0x10000 位址開始執行程式?


Hello,
感謝回覆
可以確定, 因為我有在 APP 額外加燈號測試, 確實有進 0x10000 且有繼續往下執行一小部份
甚至都透過燈號知道執行到哪邊就會異常
我將那行程式註解掉, 重新編譯執行, 它就在註解掉的下一行會異常
而且不管下一行是不是副程式或簡單的 if 判斷式都會異常,
就算在 APP 開頭將中斷全關掉, 也不能正常跑完開頭不需要進中斷的那部份程式

我寫一個簡單新的 APP,功能是由 Timer 2 每 0.1 秒中斷反向 Led
這個新 APP.h + 相同 Bootloader.h 在 0x1000 能正常, 偏移改 0x10000 也正常能閃燈

原本的 APP 是比較大, 但也不過佔用全部不到 1/4 的 PFM

發表於: 8/18 12:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#5
資深會員
資深會員


查看用戶資訊
可以麻煩確認一下透過Bootloader來更新OTA區 : 0x10000 ~ 0x1FFFF之後, 可以透過Target Memory View比對一下MCU的OTA區的flash內容與 OTA區的hex file內容是否相同.

如果燒錄不完整或是不正確, 即使有跳轉到OTA應用程式, 接下來也可能會動作異常.

發表於: 8/18 12:33
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#4
版主
版主


查看用戶資訊
可以確定一下 Bootloader 執行完後,程式的控制權有交到你的 AP 程式並且是從你所設定的 0x10000 位址開始執行程式?

發表於: 8/18 12:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#3
初級會員
初級會員


查看用戶資訊
參照:

GodBlessU wrote:
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");


Hello,
感謝回覆
我上面有說了喔, 我有重新定定義偏移重置位置, 也包含兩區各自的中斷偏移位置
這些都在 Bootloader 裡面有設置好了
而且程式有由 Bootloader 運作移交給 0x10000 (更新區的起始) 並往下執行一小段程式
這一小段程式其實也沒有進中斷, 就算我關掉 GIE 等也是一樣異常

發表於: 8/18 11:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 無關中斷,使用 Codeoffset 會使程式運作不正常
#2
資深會員
資深會員


查看用戶資訊
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");

發表於: 8/18 11:34
不要盲目地從一堆“嘗試”中去找答案;將時間用來找尋“最正確”的方法。
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


無關中斷,使用 Codeoffset 會使程式運作不正常
#1
初級會員
初級會員


查看用戶資訊
大家好!
有關於 Codeoffset 問題需要幫忙。

OS : Windows 10, Administrator 帳戶
MCU PIC18F27Q10, MPLAB X IDE V5.5, XC8 V2.32, Packs PIC18F-Q_DFP (1.11.185)

架構為 Bootloader : 0 ~ 0xFFF
出廠燒錄程式 : 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, 會異常?

發表於: 8/18 9:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







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.

[進階搜尋]


:::

Microchip連結

https://mu.microchip.com/page/tmu
http://www.microchip.com.tw/modules/tadnews/page.php?ncsn=2&nsn=41
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
https://page.microchip.com/APAC-PrefCenters-TW.html
https://www.youtube.com/user/MicrochipTechnology
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
https://www.microchip.com/development-tools/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源