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