Цитата(Kaplinsky @ May 4 2006, 11:14)

Допустим есть процедура обработки прерывания, описана так:
#pragma vector=PORT2_VECTOR
__interrupt void P2_INT_
1(){
...
}
и допустим имеется другая:
__interrupt void P2_INT_
2(){
...
}
Понятно что первая будет работать так как она зарегистрирована с помощью #pragma vector
А как в процесе выполнения программы (при определенных условиях) перерегистрировать (поменять) ISR на другую (с последующим возвратом первой) ?
На С естественно.
Ветвление внутри единой ISR непредлагать

Я делаю так:
Код
void port2_int_func1 (void)
{
//Первый обработчик
}
void port2_int_func2 (void)
{
//Второй обработчик
}
void (*port2_int_handler)(void) = port2_int_func1;
//-----------------------------------
#pragma vector = PORT2_VECTOR
//-----------------------------------
__interrupt void port2_int(void)
{
(*port2_int_handler)();
}
А дальше port2_int_handler можно присваивать указатель на любую функцию.
И никаких предупреждений.
Правда задержка вызова прерывания увеличивается с 6 до 8 тактов.
Сообщение отредактировал condor - May 4 2006, 23:16