Dany (26.03.2010 09:36, просмотров: 8213)
Не получается заполнить IVT адресами, используя линкер. Что не так? /*
** Memory Regions
*/
MEMORY
{
data (a!xr) : ORIGIN = 0x800, LENGTH = 0x4000
reset : ORIGIN = 0x0, LENGTH = 0x4
ivt : ORIGIN = 0x4, LENGTH = 0xFC
aivt : ORIGIN = 0x104, LENGTH = 0xFC
program (xr) : ORIGIN = 0x400, LENGTH = 0x1000
config4 : ORIGIN = 0x2ABF8, LENGTH = 0x2
config3 : ORIGIN = 0x2ABFA, LENGTH = 0x2
config2 : ORIGIN = 0x2ABFC, LENGTH = 0x2
config1 : ORIGIN = 0x2ABFE, LENGTH = 0x2
}
__CONFIG3 = 0x2ABFA;
__CONFIG2 = 0x2ABFC;
__CONFIG1 = 0x2ABFE;
__IVT_BASE = 0x4;
__AIVT_BASE = 0x104;
__DATA_BASE = 0x800;
__CODE_BASE = 0x400;
/*
** ==================== Section Map ======================
*/
SECTIONS
{
/*
** ========== Program Memory ==========
*/
/*
** Reset Instruction
*/
.reset :
{
SHORT(ABSOLUTE(__reset));
SHORT(0x04);
SHORT((ABSOLUTE(__reset) >> 16) & 0x7F);
SHORT(0);
} >reset
/*
** Interrupt Vector Tables
**
** The primary and alternate tables are loaded
** here, between sections .reset and .text.
** Vector table source code appears below.
*/
/*
** Interrupt Vector Table
*/
.ivt __IVT_BASE :
{
LONG(ABSOLUTE(0x1404)); /* __ReservedTrap0*/
LONG(ABSOLUTE(0x1408)); /* __OscillatorFail*/
LONG(ABSOLUTE(0x140C)); /* __AddressError*/
LONG(ABSOLUTE(0x1410)); /* __StackError*/
LONG(ABSOLUTE(0x1414)); /* __MathError*/
LONG(ABSOLUTE(0x150C)); /* __ReservedTrap5 not implemented */
LONG(ABSOLUTE(0x150C)); /* __ReservedTrap6 not implemented */
LONG(ABSOLUTE(0x150C)); /* __ReservedTrap7 not implemented */
LONG(ABSOLUTE(0x1418)); /* __INT0Interrupt*/
LONG(ABSOLUTE(0x141C)); /* __IC1Interrupt*/
LONG(ABSOLUTE(0x1420)); /* __OC1Interrupt*/
LONG(ABSOLUTE(0x1424)); /* __T1Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt4 not implemented */
LONG(ABSOLUTE(0x1428)); /* __IC2Interrupt*/
LONG(ABSOLUTE(0x142C)); /* __OC2Interrupt*/
LONG(ABSOLUTE(0x1430)); /* __T2Interrupt*/
LONG(ABSOLUTE(0x1434)); /* __T3Interrupt*/
LONG(ABSOLUTE(0x1438)); /* __SPI1ErrInterrupt*/
LONG(ABSOLUTE(0x143C)); /* __SPI1Interrupt*/
LONG(ABSOLUTE(0x1440)); /* __U1RXInterrupt*/
LONG(ABSOLUTE(0x1444)); /* __U1TXInterrupt*/
LONG(ABSOLUTE(0x1448)); /* __ADC1Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt14 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt15 not implemented */
LONG(ABSOLUTE(0x144C)); /* __SI2C1Interrupt*/
LONG(ABSOLUTE(0x1450)); /* __MI2C1Interrupt*/
LONG(ABSOLUTE(0x1454)); /* __CompInterrupt*/
LONG(ABSOLUTE(0x1458)); /* __CNInterrupt*/
LONG(ABSOLUTE(0x145C)); /* __INT1Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt21 not implemented */
LONG(ABSOLUTE(0x1460)); /* __IC7Interrupt*/
LONG(ABSOLUTE(0x1464)); /* __IC8Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt24 not implemented */
LONG(ABSOLUTE(0x1468)); /* __OC3Interrupt*/
LONG(ABSOLUTE(0x146C)); /* __OC4Interrupt*/
LONG(ABSOLUTE(0x1470)); /* __T4Interrupt*/
LONG(ABSOLUTE(0x1474)); /* __T5Interrupt*/
LONG(ABSOLUTE(0x1478)); /* __INT2Interrupt*/
LONG(ABSOLUTE(0x147C)); /* __U2RXInterrupt*/
LONG(ABSOLUTE(0x1480)); /* __U2TXInterrupt*/
LONG(ABSOLUTE(0x1484)); /* __SPI2ErrInterrupt*/
LONG(ABSOLUTE(0x1488)); /* __SPI2Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt34 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt35 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt36 not implemented */
LONG(ABSOLUTE(0x148C)); /* __IC3Interrupt*/
LONG(ABSOLUTE(0x1490)); /* __IC4Interrupt*/
LONG(ABSOLUTE(0x1494)); /* __IC5Interrupt*/
LONG(ABSOLUTE(0x1498)); /* __IC6Interrupt*/
LONG(ABSOLUTE(0x149C)); /* __OC5Interrupt*/
LONG(ABSOLUTE(0x14A0)); /* __OC6Interrupt*/
LONG(ABSOLUTE(0x14A4)); /* __OC7Interrupt*/
LONG(ABSOLUTE(0x14A8)); /* __OC8Interrupt*/
LONG(ABSOLUTE(0x14AC)); /* __PMPInterrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt46 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt47 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt48 not implemented */
LONG(ABSOLUTE(0x14B0)); /* __SI2C2Interrupt*/
LONG(ABSOLUTE(0x14B4)); /* __MI2C2Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt51 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt52 not implemented */
LONG(ABSOLUTE(0x14B8)); /* __INT3Interrupt*/
LONG(ABSOLUTE(0x14BC)); /* __INT4Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt55 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt56 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt57 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt58 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt59 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt60 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt61 not implemented */
LONG(ABSOLUTE(0x14C0)); /* __RTCCInterrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt63 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt64 not implemented */
LONG(ABSOLUTE(0x14C4)); /* __U1ErrInterrupt*/
LONG(ABSOLUTE(0x14C8)); /* __U2ErrInterrupt*/
LONG(ABSOLUTE(0x14CC)); /* __CRCInterrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt68 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt69 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt70 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt71 not implemented */
LONG(ABSOLUTE(0x14D0)); /* __LVDInterrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt73 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt74 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt75 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt76 not implemented */
LONG(ABSOLUTE(0x14D4)); /* __CTMUInterrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt78 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt79 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt80 not implemented */
LONG(ABSOLUTE(0x14D8)); /* __U3ErrInterrupt*/
LONG(ABSOLUTE(0x14DC)); /* __U3RXInterrupt*/
LONG(ABSOLUTE(0x14E0)); /* __U3TXInterrupt*/
LONG(ABSOLUTE(0x14E4)); /* __SI2C3Interrupt*/
LONG(ABSOLUTE(0x14E8)); /* __MI2C3Interrupt*/
LONG(ABSOLUTE(0x14EC)); /* __USB1Interrupt*/
LONG(ABSOLUTE(0x14F0)); /* __U4ErrInterrupt*/
LONG(ABSOLUTE(0x14F4)); /* __U4RXInterrupt*/
LONG(ABSOLUTE(0x14F8)); /* __U4TXInterrupt*/
LONG(ABSOLUTE(0x14FC)); /* __SPI3ErrInterrupt*/
LONG(ABSOLUTE(0x1500)); /* __SPI3Interrupt*/
LONG(ABSOLUTE(0x1504)); /* __OC9Interrupt*/
LONG(ABSOLUTE(0x1508)); /* __IC9Interrupt*/
LONG(ABSOLUTE(0x150C)); /* __Interrupt94 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt95 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt96 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt97 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt98 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt99 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt100 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt101 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt102 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt103 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt104 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt105 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt106 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt107 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt108 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt109 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt110 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt111 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt112 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt113 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt114 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt115 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt116 not implemented */
LONG(ABSOLUTE(0x150C)); /* __Interrupt117 not implemented */
} >ivt
...