Цитата(Kaplinsky @ May 4 2006, 18:00)

Цитата(VAI @ May 4 2006, 14:57)

А в озу Вы налету можете переопределять обработчики. (так когдато в ДОСе веселились)
Мне же надо сделать подобное под IAR for MSP (забыл уточнить)
Еще я работаю с MSP430F149-й.
Сейчас ISR работает на ветвлении (вначале ISR стоит if который проверяет флаг) но хотелось бы сделать красяво.
А Вы пример смотрели? Он под ИАР и для MSP.
Цитата
dxp
Вектора прерываний в MSP430 лежат во флеши, сами их не поменяешь. Но можно делать дополнительную векторизацию - при прерывании в PC загружается адрес обработчика, а в обработчике просто тупой переход на нужную функцию - jump ...
В этом и заключена основная идея. Делаете в ОЗУ массив из указателей на функции __interrupt. На элементы этого массива указывает родная таблица прерываний во флэше. А уж поменять значение элемента массива....
А в досе можно проще
Код
typedef void ( far interrupt *_INTER)( void );
.....
static _INTER far *int_tab = (void far *)NULL; // таблица векторов прерываний
static void ( interrupt far *old_1c )();
.....
_disable(); // Запретим прерывания
old_1c = int_tab[0x1c]; // Возьмем вектор
int_tab[0x1c] = new_1c; // Установим новый
_enable(); // Разрешим прерывания