fengyunyu 发表于 2014-12-20 12:19:53

看不懂PIC24的链接文件,搞PIC的坛友指点下?

/*
** Linker script for PIC24F16KA102
*/

OUTPUT_ARCH("24F16KA102")
EXTERN(__resetPRI)
EXTERN(__resetALT)

OPTIONAL(-lpPIC24Fxxx)

/*
** Memory Regions
*/
MEMORY
{
data(a!xr) : ORIGIN = 0x800,         LENGTH = 0x600
reset      : ORIGIN = 0x0,         LENGTH = 0x4
ivt          : ORIGIN = 0x4,         LENGTH = 0xFC
aivt         : ORIGIN = 0x104,         LENGTH = 0xFC
program (xr) : ORIGIN = 0xC00,         LENGTH = 0x1FFF
eedata       : ORIGIN = 0x7FFE00,      LENGTH = 0x200
FBS          : ORIGIN = 0xF80000,      LENGTH = 0x2
FGS          : ORIGIN = 0xF80004,      LENGTH = 0x2
FOSCSEL      : ORIGIN = 0xF80006,      LENGTH = 0x2
FOSC         : ORIGIN = 0xF80008,      LENGTH = 0x2
FWDT         : ORIGIN = 0xF8000A,      LENGTH = 0x2
FPOR         : ORIGIN = 0xF8000C,      LENGTH = 0x2
FICD         : ORIGIN = 0xF8000E,      LENGTH = 0x2
FDS          : ORIGIN = 0xF80010,      LENGTH = 0x2

/*
** Section for storing user app reset vector and BL time out value.This
** section must be defined to allow use of the two location at address
** 0x100 (the bootloader's default setting).
** This is not needed if these values are placed in addresses in
** the "program" section.
*/
BLreset           : ORIGIN = 0x100, LENGTH = 0x4
}


看了半天,好像是ROM区的LENGTH 单位为字(16bit),RAM区的LENGTH 单位为字节(8bit)。搞PIC的坛友指点下?

fengyunyu 发表于 2014-12-20 13:25:51

/*
** Reset Instruction
*/
.reset :
{
      SHORT(ABSOLUTE(__reset));
      SHORT(0x04);
      SHORT((ABSOLUTE(__reset) >> 16) & 0x7F);
      SHORT(0);
} >reset

预留了8字节的空间,但实际上又只有6字节的数据。地址长度又是4。这些数字真的让人搞混、搞晕。

fengyunyu 发表于 2014-12-21 10:03:09

data(a!xr) : ORIGIN = 0x800,         LENGTH = 0x600

这行是描述RAM的分配,0x600是以字节为单位

reset      : ORIGIN = 0x0,         LENGTH = 0x4

这行是描述ROM的分配,0x4则是以字(16bit)为单位

不知道这个理解对还是不对,有搞过坛友指点下。
页: [1]
查看完整版本: 看不懂PIC24的链接文件,搞PIC的坛友指点下?