最近用MDK460开发一个项目,遇到了代码绝对定位问题,特来求教
我需要把一个.C文件内所有函数指定分配到一个地址,SCT加载文件如下
ER_IROM2 0x12A0000 0x10000
{
PLC_DRV.o(+RO) ;这个就是我要指定分配地址的文件PLC_DRV.C的目标文件
}
这样写确实部分实现了我的预期:PLC_DRV.C的所有函数都老实的分配到了0x12A0000开始的64K地址内。
但是问题来了,观察MAP文件
Symbol Name Value Ov Type Size Object(Section)
ntyk 0x012a0000 ARM Code 96 plc_drv.o(.text)
stx_check 0x012a0060 ARM Code 92 plc_drv.o(.text)
plc_drv 0x012a00bc ARM Code 1772 plc_drv.o(.text)
PLC_DRV.C里的三个函数在目标段的64K地址内似乎是乱序分配的?并不是我想的按C文件内顺序分配地址。
我的本意是:
1,PLC_DRV.C的所有函数都分配在指定的地址段
2,指定的地址段的首地址必须能分配给某个PLC_DRV.C文件内的函数(公用入口),这里我想要将0x12A0000分配给plc_drv这个函数
目前1已经实现,但2死活做不到,无论我怎么调整PLC_DRV.C文件内的函数排列顺序,MDK都视而不见。
我只要将plc_drv这个函数指定在0x12A0000,其他函数的分配只要在64K范围内,顺序无所谓。但是现在弄了一天了,还是没实现,甚至我都没弄明白MDK究竟是依据什么来对一个C文件的函数进行地址分配的。
或者单纯通过SCT加载文件的方式不能实现我的要求,需要使用其他方法?
请大家指点,谢谢
|