ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
131719 Топик полностью
S_U (18.09.2008 08:46, просмотров: 198) ответил Сергей Борщ на Обычно принято приводить результат "разобрался", чтобы другие с такой же проблемой наткнувшись на ваше сообщение нашли и решение.
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