SEGMENTS /* here all RAM/ROM areas of the device are listed. Used
in PLACEMENT below. All addresses are 'logical' */ /* Register space */ /* IO_SEG =
PAGED
0x0000
TO 0x07FF; intentionally not defined */ /* non-paged RAM */ RAM
= READ_WRITE DATA_NEAR
0x2000 TO
0x3FFF; /* non-banked FLASH */ ROM_4000 =
READ_ONLY DATA_NEAR IBCC_NEAR 0x4000
TO 0x7FFF; ROM_C000 =
READ_ONLY DATA_NEAR IBCC_NEAR 0xC000
TO 0xFEFF; /* VECTORS = READ_ONLY
0xFF00 TO 0xFFFF; intentionally not
defined: used for VECTOR commands below */ //OSVECTORS = READ_ONLY
0xFF10 TO
0xFFFF; /* OSEK interrupt vectors (use your
vector.o) */ /* paged EEPROM
0x0800
TO 0x0BFF; addressed through EPAGE */ EEPROM_00 =
READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO
0x000BFF; EEPROM_01 =
READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO
0x010BFF; EEPROM_02 =
READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO
0x020BFF; EEPROM_03 =
READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO
0x030BFF; EEPROM_04 =
READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO
0x040BFF; EEPROM_05 =
READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO
0x050BFF; EEPROM_06 =
READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO
0x060BFF; EEPROM_07 =
READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO
0x070BFF; /* paged RAM:
0x1000 TO 0x1FFF; addressed through RPAGE */ /* RAM_FE =
READ_WRITE
0xFE1000 TO 0xFE1FFF;
intentionally not defined: equivalent to RAM: 0x2000..0x2FFF */ /* RAM_FF =
READ_WRITE
0xFF1000 TO 0xFF1FFF;
intentionally not defined: equivalent to RAM: 0x3000..0x3FFF */ /* paged FLASH:
0x8000
TO 0xBFFF; addressed through PPAGE */ PAGE_F8
= READ_ONLY DATA_FAR
IBCC_FAR 0xF88000 TO 0xF8BFFF; PAGE_F9 =
READ_ONLY DATA_FAR IBCC_FAR 0xF98000 TO
0xF9BFFF; PAGE_FA =
READ_ONLY DATA_FAR IBCC_FAR 0xFA8000 TO
0xFABFFF; PAGE_FB =
READ_ONLY DATA_FAR IBCC_FAR 0xFB8000 TO
0xFBBFFF; PAGE_FC =
READ_ONLY DATA_FAR IBCC_FAR 0xFC8000 TO
0xFCBFFF; /* PAGE_FD = READ_ONLY
0xFD8000 TO 0xFDBFFF; intentionally not
defined: equivalent to ROM_4000 */ PAGE_FE =
READ_ONLY DATA_FAR IBCC_FAR 0xFE8000 TO
0xFEBFFF; /* PAGE_FF = READ_ONLY
0xFF8000 TO 0xFFBFFF; intentionally not
defined: equivalent to ROM_C000 */ END PLACEMENT /* here all predefined and user segments are placed into
the SEGMENTS defined above. */ _PRESTART,
/* Used in HIWARE
format: jump to _Startup at the code start */ STARTUP,
/* startup data structures */ ROM_VAR,
/* constant variables */ STRINGS,
/* string literals */ VIRTUAL_TABLE_SEGMENT, /* C++
virtual table segment */ //.ostext,
/* eventually OSEK
code */ NON_BANKED,
/* runtime routines which must not
be banked */ COPY
/* copy
down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are
compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_4000*/; DEFAULT_ROM
INTO
PAGE_FE,
PAGE_FC,PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8; //.stackstart,
/* eventually used for OSEK kernel awareness:
Main-Stack Start */ SSTACK,
/* allocate stack first
to avoid overwriting variables on overflow */ //.stackend,
/* eventually used for OSEK kernel
awareness: Main-Stack End */ PAGED_RAM,
/* there is no need for
paged data accesses on this derivative */ DEFAULT_RAM
/* all variables, the default RAM
location */
INTO RAM; DISTRIBUTE
DISTRIBUTE_INTO
ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9,
PAGE_F8; CONST_DISTRIBUTE DISTRIBUTE_INTO
ROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9,
PAGE_F8; DATA_DISTRIBUTE
DISTRIBUTE_INTO
RAM; //.vectors
INTO OSVECTORS; /* OSEK vector table */ END
使用#pragma CONST_SEG DISTRIBUTE 在数组前 声明
但是 总是出现 out of allocation space in segment ROM_400 at
address 0x4000