ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
131519 Топик полностью
S_U (16.09.2008 16:13, просмотров: 119) ответил Сергей Борщ на Примерно так:
Сергей спасибо, но я наверно не совсем корректно сформулировал вопрос. Речь идет о прерывании с переходом в режим Supervisor - ассемблерная команда SWI. В IAR Compiler reference приводится пример #pragma swi_number=0x23 __swi __arm int swi_function(int a, int b); где swi_function судя по всему должен быть сам обработчик а в int a или int b передоваемый параметр (0x23) для идентификации прерывания. Далее IAR рекомендует: All interrupt functions and software interrupt handlers must be installed into the vector table. unsigned int install_handler(unsigned int *vector, unsigned int function) { unsigned int vec, old_vec; vec = ((function - (unsigned int)vector - 8) >> 2); old_vec = *vector; vec |= 0xea000000; /* add opcode for B instruction */ *vector = vec; old_vec &= ~0xea000000; old_vec = ( old_vec << 2 ) + (unsigned int)vector + 8; return(old_vec); } Но здесь я что то не понимаю SWITAB Holds the software interrupt vector table. Причем сегмент SWITAB линкер размещает в CODE. Что у меня только усугубляет полную разруху в голове.