我用ADS把一部分代码生成了一个自己的库文件lib.a,随后又在库的基础上做了个小应用程序,已经证实成功,应用能够正常运行。
现在我想通过分散加载机制把整个库文件定位到Flash的某个固定区域,这样做的好处在于可以避免更新代码后全部重新烧写,大幅减少烧写时间。
但在实际应用时却发现,只要我对应用部分的代码稍作修改,前后2次生成的LIB映象大小虽然完全一致,但内容却差了好多,完全违背了我的本意,为什么?
是我的分散加载不对呢?还是编译连接的时候选项设置有问题?大侠请接招!!!
以下是我的分散加载文件:
ROM_LOAD 0x80000000
{
ROM_EXEC 0x80000000
{
Startup.o (vectors, +First)
* (+RO)
}
IRAM 0x40000000
{
Startup.o (MyStacks)
}
STACKS_BOTTOM +0 UNINIT
{
Startup.o (StackBottom)
}
STACKS 0x40004000 UNINIT
{
Startup.o (Stacks)
}
ERAM 0x81000000
{
* (+RW,+ZI)
}
HEAP +0 UNINIT
{
Startup.o (Heap)
}
HEAP_BOTTOM 0x81080000 UNINIT
{
Startup.o (HeapTop)
}
}
LIB 0x800D0000
{
LIB 0x800D0000
{
;LIB库包含的所有目标文件
os_cpu_c.o (+RO)
Os_cpu_a.o (+RO)
OS_TIME.o (+RO)
OS_CORE.o (+RO)
OS_FLAG.o (+RO)
OS_MBOX.o (+RO)
OS_MEM.o (+RO)
OS_MUTEX.o (+RO)
OS_Q.o (+RO)
OS_SEM.o (+RO)
OS_TASK.o (+RO)
queue.o (+RO)
Global.o (+RO)
Flash.o (+RO)
GPRS.o (+RO)
UART.o (+RO)
WatchDog.o (+RO)
sysfunc.o (+RO)
}
RAM 0x81040000
{
os_cpu_c.o (+RW,+ZI)
Os_cpu_a.o (+RW,+ZI)
OS_CORE.o (+RW,+ZI)
Flash.o (+RW,+ZI)
COMM.o (+RW,+ZI)
; UART.o (+RW,+ZI)
; WatchDog.o (+RW,+ZI)
; sysfunc.o (+RW,+ZI)
}
}