作者ast9869 (甘愿为你~)
看板ASM
标题Re: [转]MCU bootloader
时间Wed May 28 09:56:39 2008
後来我的做法并不是使用前篇的方法,自己想了一下
-------------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)