|
首先说一下我对 BootLoader 的理解:
1。ATmega8 的8kFlash 分为 boot 区和 用户区(用户区在前,BOOT区在后)
2。boot 程序是作为一个单独的程序来编译,执行的,
3。通过在Makefile中找到这一段,
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
在该段的后面添加一行:
DFLAGS += -Wl,--section-start=.text=0x1800
表示将程序启动起始地址:设置到boot区
4。用slisp 设置熔丝位,如下图所示:
里面标错了,是1K的BOOT区
这样用 下载线或其他的烧写BOOT程序进ATmega8后,
单片机重新上电,复位就是从BOOT 区开始执行了。 |
|