谢谢d1d2前辈提供的线索 看了《ARM体系结构与编程》中的连接器部分 和ADS的ARM LINKER文档 对分散加载有点点了解了 试着写了个分散加载的小文件
load 0x00000000 { exec1 0x00000000 { 44binit.o(init,+first) *(+ro) } exec2 0x0c000000 { *(+rw,+zi) } } 烧录后可以运行 稍微修改下 load1 0x00000000 { exec1 0x00000000 //0x00000000是ROM的起始地址 { 44binit.o(init,+first) *(+ro) } exec2 0x0c000000 //0x0c000000是RAM的起始地址 { *(+rw,+zi) } }
load2 0x00005000 { exec3 0x00005000 { main.o(+ro) } } 也能运行 但是发现 所有被加载的 *.o文件的 RO输入段 只能再ROM里面 不能放到 RAM的地址去运行 如果改成 load2 0x00005000 { exec3 0x0c100000 { main.o(+ro) } } 程序就跑飞了
暂时结论 所有的RO输入段只能再ROM里跑 不过相关的RW ZI可以复制到RAM里 请前辈指教 是这样吗? |