分散加载文件中的内存是如何和实际对应起来的呢?
比如下面的代码:
LR_IROM1 0x08000000 0x00010000 { ; load region size_region ER_IROM1 0x08000000 0x00010000 { ; load address = execution address *.o (RESET +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00002800 { ; RW data .ANY (+RW +ZI) } HEAP +0 { *.o (HEAP) } STACKS 0x20002800 -0x00000200 { *.o (STACK) } }
RAM是20kb,应该是0x00005000
为什么和实际对应不上呢?
这个具体要分析
如果分析PC环境下,就有虚拟内存空间和实际内存的对应关系这样一种情况,即程序自身标识的内存空间只是虚拟内存空间地址,需要在系统层面进行转译对应到实际内存空间中,这样的方法可以节约大量内存占用,实现多任务共享内存。
当然,在单片机环境中有时没有系统内存管理这个处理,不过在编译链接时,一样可以进行转译处理,让普通程序中定义的分散信息,能相对集中的加载和分布到实际空间中,以提高内存使用效率。