Re: [轉]MCU bootloader

看板ASM (組合語言)作者 (甘願為妳~)時間16年前 (2008/05/28 09:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
後來我的做法並不是使用前篇的方法,自己想了一下 -------------code:0x0000h | | 主程式(傳輸 interface, interrupt,flash的抹寫func...., 是不會異動的) | -------------code:0x1400h | | 應用程式區(我這邊是一些ICE function..., 是經常需要異動的) | -------------code:0x7fffh 主程式中有一個 RunICE(); 而RunICE() 則定義在 ICE_fun.c. RunICE() 裡面就可以設計成 switch case的方式, 看是要run SingleSetp(), Run(), Stop(), 這就由傳輸進來的資料做判斷了。 應用程式都放在一個ICE_func.c,使用BL51 Locate來定義所有 function(?PR?)從code:0x1400h 開始,所以RunICE()就要放在ICE_func.c中的第一個, 這樣應用程式的進入點就固定在code:0x1400h了。 ICE_func.c 的 code形態的變數(?CO?)則在function的後面 ICE_func.c 的 data(?DT?)放在Data區段的最後面,方便未來括充。 ICE_func.c 的 xdata, bit, idata, stack等依此類推。 我的是如下: code : ?PR?*?ICE_FUNC(0x1400),?CO?ICE_FUNC xdata: ?XD?ICE_FUNC(0x50) data : ?DT?ICE_FUNC(0x60) idata: ?STACK(0x80) 這樣設定完後,code:0x1400h以前的程式就不會動到了, build 出hex出來後,再使用 hex2bin.exe(上網抓)轉成 .bin 這個就是我們要的, 在AP層就從 0x1400開始連續抹寫, 寫完了Flash 就Reset MCU, 大功告成。 PS. 把 .\LST\*.m51 打開就會知道我在說什麼了。 -- ████████████████ █ █████████████ ██████████████ █ ██████████████ ██████████████ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.190.103 ※ 編輯: ast9869 來自: 60.250.190.103 (05/28 10:01) ※ 編輯: ast9869 來自: 60.250.190.103 (05/28 10:08)
文章代碼(AID): #18FBlPMZ (ASM)
討論串 (同標題文章)
文章代碼(AID): #18FBlPMZ (ASM)