реклама на сайте
подробности

 
 
> Как заменить ассемблерный обработчик прерываний на Си-шный?
Алекс-666
сообщение Mar 13 2008, 08:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 6-06-07
Пользователь №: 28 233



Имеется работающий проект в IAR 2.31. Обработчик прерываний написан на асме. Есть необходимость заменить обработчик, причём на написанный на С. Попытки сделать это методом тыка провалились, а разобраться по хелпу тоже не удалось.
Удалил из проекта асмовский файл, добавил сишный. Сам файл с обработчиком (потом он будет покруче smile.gif)
Цитата
#include "iom8.h"
#include "ina90.h"
interrupt [SPI_STC_vect] void SPI_STC(void){ N_OUT=SPDR; }

IAR ругается на слово "interrupt", вторая ошибка явно наведенная:
Цитата
interrupt.c (6) : Error[Pe077]: this declaration has no storage class or type specifier
interrupt.c (6) : Error[Pe065]: expected a ";"

Как его туда втулить, чтобы приняли за своего? smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Mar 14 2008, 08:13
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Оставьте старый вариант на случай, если вдруг понадобится компилить под GCC.
Там как раз такой синтаксис (кстати говоря, стандартный)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 14 2008, 08:34
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Mar 14 2008, 10:13) *
Оставьте старый вариант на случай, если вдруг понадобится компилить под GCC.
Там как раз такой синтаксис (кстати говоря, стандартный)
Интересно-интересно... Вот вырезка из avr-libc, в которой видно, какой синтаксис применяется в avr-gcc:
Код
#ifdef __cplusplus
#define ISR(vector)                    \
extern "C" void vector(void) __attribute__ ((signal,__INTR_ATTRS));    \
void vector (void)
#else
#define ISR(vector)                    \
void vector (void) __attribute__ ((signal,__INTR_ATTRS));        \
void vector (void)
#endif
Соответственно описание вектора выглядит как
Код
ISR(TIMER1_COMPA_vect)
{
}

или, если развернуто

void TIMER1_COMPA_vect (void) __attribute__ ((signal,__INTR_ATTRS));
void TIMER1_COMPA_vect (void)
{
}
Не вижу ничего общего. Не могли бы вы привести ссылочку на описание вашего стандартного синтаксиса?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 18:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016