Цитата(Daermon @ Oct 30 2007, 14:06)

Программа сделана для работы с внешнего ОЗУ 0х21000000
Вектора прописываются там же 0х21000000
Вы можете разместить вектора где угодно, но процессор, несмотря на это, все равно будет при исключениях переходить в фиксированные адреса 00-1С. Поэтому, при размещении векторов в ОЗУ надо сделать remap, тогда начальная область ОЗУ (или все ОЗУ) окажется также отражено на нулевые адреса и процессор при исключении попадет на ваши вектора. Только надо помпить, что несмотря на то, что вектора физически расположены в верхних адресах, их содержимое должно быть таким, как будто они находятся в нулевых. В вашем случае надо написть в .xcl что-то вроде
Код
-DRAMSTART=21000000
-DRAMEND=21003FFF
// vectors always linked to 0x00-0x3F
-Z(CODE)INTVEC=00000000-0000003F
// Mirrored vectors placed in RAM
-Z(CODE)INTVEC_I=RAMSTART-RAMEND
-QINTVEC=INTVEC_I
-Z(CODE)ICODE,CODE,DIFUNCT,SWITAB=RAMSTART-RAMEND
А при старте отладчика (в .mac) сделать ремап :
Код
execUserReset()
{
Remap_RAM();
__writeMemory32(0xD3,0x98,"Register"); // CPSR = SVC mode, ARM, IRQ, FIQ disabled
__writeMemory32(0x00000000,0xB4,"Register");
}
Remap_RAM()
{
__var tmp;
tmp = __readMemory32(0x00200000, "Memory"); // read from RAM area
__writeMemory32(~tmp, 0x00200000, "Memory"); // alter RAM area
if( ~tmp != __readMemory32(0x00000000, "Memory") ) // check if altering mirrored to remap area
{
__writeMemory32(0x00000001, 0xFFFFFF00,"Memory"); // otherwice remap
}
__writeMemory32(tmp, 0x00200000 ,"Memory"); // restore RAM data
__message " remapped to RAM";
}
Цитата(alexander55 @ Oct 30 2007, 14:12)

Рекомендую указать компилятор и uC для определенности.
Компилятор был указан, а насчет uC - прекрасный повод потренироваться в телепатии. Раз упомятут AIC_SVR - это атмел. Раз ОЗУ живет начиная с 0x21000000 - это что-нибудь с внешней памятью. Интуитивно предполагаем RM9200.