Sorry. Программные прерывания в IAR for ARM. Детально не разбирался, но в общем это выглядит так:
#define swi_number_function_1 0x10 #define swi_number_function_2 0x11 #pragma swi_number=swi_number_function_1 __swi __arm int swi_function_1(int a, int b); #pragma swi_number=swi_number_function_2 __swi __arm int swi_function_2(int a, int b); __swi __arm int swi_function_1(int a, int b) { int c=b; return c; } __swi __arm int swi_function_2(int a, int b) { int c=b; return c; }swi_function_1( )- функция обработчик программного прерывания с идентификатором swi_number_function_1. Прерывание в программе вызывается как;
swi_function_1(swi_number_function_1, data);Где data - передаваемый функции обработчику параметр типа int, swi_number_function_1 - идентификатор данного прерывания, вместе с указателем на функцию обработчик данного прерывания размещается в сегменте SWITAB(как формируется таблица не разбирался). Для нормальной работы необходимо в cstartup проекта убрать комментарии с вектора программного прерывания (cstartup я тупо копировал из src\lib\) и с адреса обработчика программных прерываний. У меня почемуто в cstartup имя обработчика swi_handler отличалось от библиотечного (IAR 4.41A), соответственно его необходимо изменить.
org 0x28 dc32 __iar_swi_handler