Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать
8.3.2. Синтаксис ISR

16-битовый компилятор Си. Руководство

8.3.Написание программы обработки прерывания

Следуя рекомендациям данного подраздела вы сможете писать весь код вашего приложения, включая программы обслуживания прерываний, только на Си.

8.3.1. Рекомендации по написанию ISR

Для написания ISR следует выполнять рекомендации:

Объявлять ISR типа void и без параметров (обязательно)

Не вызывать ISR из кода основной программы (обязательно)

Не вызывать из ISR других функций (рекомендуется)

 

ISR 16-битового устройства является похожей на любые другие функцией Cи в том

A

 

смысле, что может иметь локальные переменные.

и доступ к глобальным

переменным. Однако, ISR должна быть объявлена без параметров и без

возвращаемой величины. Это необходимо, поскольку ISR, в ответ на аппаратное или

Wilson

 

программное прерывание, вызывается асинхронно по отношению к основной программе Cи (т.е., это не вызов в обычном смысле, так что параметры и возвращаемое значение не используются).

ISR должна быть вызвана только с помощью аппаратного или программного прерывания, но не из других функций Cи. Для возврата ISR использует команду возврата из прерывания (RETFIE), а не обычную команду RETURN. Использование инструкции RETFIE вне контекста может повредить ресурсы процессора, например, регистр состояния.

Наконец, ISR не должна вызывать другие функции. Это рекомендуется из-за времени ожидания запросов.by Подробнее см. п. 8.6. «Время ожидания».

Для того, чтобы объявить функцию Cи как обработчик прерывания, снабдите ее

__attribute ((interrupt [(

атрибутом прерывания (описание ключевого слова __attribute__ см. п. 2.3.). СинтаксисTranslatedатрибута прерывания:

[ save(symbol-list)] [, irq(irqid)]

[, altirq(altirqid)] [, preprologue(asm)] )]

))

Имя атрибута interrupt и имена параметров могут быть заключены в парные символы подчеркивания, перед и после имени. Таким образом, interrupt и __interrupt эквивалентны, также как save и __save__.

Необязательный параметр save задает список из одной или более переменных, которые должны быть сохранены при входе и восстановлены при выход из ISR. Список имен записывается в круглых скобках, имена разделяются запятыми.

Вы должны организовать сохранение глобальных переменных, которые могут быть модифицированы ISR, если вы не хотите экспортировать их величину. Глобальные переменные, модифицируемые ISR, должны быть квалифицированы как volatile.

Необязательный параметр irq позволяет устанавливать вектор для определенного прерывания, а необязательный параметр altirq позволяет делать то же самое в альтернативной таблице векторов прерываний. Каждый параметр требует заключенный в скобки номер прерывания. (Список прерываний см. в п. 8.4. «Запись вектора прерывания».)

Необязательный параметр preprologue позволяет вам вставлять операторы на ассемблере в генерируемый код непосредственно перед прологом функции, генерируемым компилятором.

DS51284H(ru) стр. 8-2

© 2008 Microchip Technology Inc.

Соседние файлы в папке Микропроцессорная техника Сторожок