abivan (23.04.2019 16:46, просмотров: 381) ответил AlexBi на PIC24HJ256GP206A и ошибка значения указателя стека. Вроде бы хорошая вещь, можно контролировать выход стека за границы. Но, если в указатель стека записать что-то, выходящее за рамки физического ОЗУ, то вместо прерывания (и перехода на обработчик
вот мои обработчики
void __attribute__((interrupt, no_auto_psv)) _StackError (void){
t_Trap Trap;
Trap.wType=1;
Trap.wSP=WREG15;
Trap.wSPLIM=SPLIM;
DB_PutPar(ID_PAR_TRAP, (ptr)&Trap);
TRISD=0xF00;
LATD=0x20;
while(1) Nop(); /* при переполнении стека задачи попадем сюда */
}
void __attribute__((interrupt, no_auto_psv)) _MathError (void){
t_Trap Trap;
Trap.wType=2;
Trap.wSP=WREG15;
Trap.wSPLIM=SPLIM;
DB_PutPar(ID_PAR_TRAP, (ptr)&Trap);
TRISD=0xF00;
LATD=0x28;
while(1) Nop();
}
void __attribute__((interrupt, no_auto_psv)) _AddressError (void){
t_Trap Trap;
Trap.wType=3;
Trap.wSP=WREG15;
Trap.wSPLIM=SPLIM;
DB_PutPar(ID_PAR_TRAP, (ptr)&Trap);
TRISD=0xF00;
LATD=0x30;
while(1) Nop();
}
void __attribute__((interrupt, no_auto_psv)) _OscillatorFail (void){
t_Trap Trap;
Trap.wType=4;
Trap.wSP=WREG15;
Trap.wSPLIM=SPLIM;
DB_PutPar(ID_PAR_TRAP, (ptr)&Trap);
TRISD=0xF00;
LATD=0x38;
while(1) Nop();
}