Re: [轉]MCU bootloader
後來我的做法並不是使用前篇的方法,自己想了一下
-------------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)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章