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

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

LATGbits.LATG2 = 0;

/* Вероятно, проблем не будет,

 

скорее всего, будет использована,

 

одна команда сброса всех битов */

LATG += 0x0001;

/* Потенциальный РИСК —

 

Сначала LATG читается в W,

 

выполняется сложение, затем

 

результат записывается в LATG */

IPC0bits.T1IP = 5;

/* РИСК — присвоение многобитовому полю

 

может сгенерировать длинную

 

последовательность команд */

}

.

Оператор может быть защищен из прерыванияA с использованием макроса INTERRUPT_PROTECT приведенного выше. Для этого примера:

INTERRUPT_PROTECT(LATGbits.LATG15 ^= 1); /* Не прерывается запросами с уровнями приоритета 0-6 и безопасно для любого уровня оптимизации */

8.10.Использование PSV в ISR

Введение управляющих psv указателейWilsonи CodeGuard Security секций psv констант в компиляторе v3.0 означает, что программы обслуживания прерываний не могут сделать каких-либо предположений об установке регистра PSVPAG. Есть проблема переноса существующих приложений с ISR, которые используют секцию констант auto_psv. В предшествующих версиях компилятора ISR могли предполагать правильное значение регистра PSVPAG, установленное в процессе запуска программы (если программист явно не изменил его.)

Чтобы помочь смягчить эту проблему, введены два новых атрибута функции:

auto_psv и

by

no_auto_psv. Если ISR ссылается на константные переменные или

АтрибутTranslatedno auto psv используется для обозначения, что ISR не ссылается на секцию констант auto_psv. Если никакой атрибут не определен, компилятор

строковые литералы, использующие модель памяти constants-in-code, к определению функции должен быть добавлен атрибут auto_psv. Этот атрибут заставит компилятор сохранить предшествующее значение PSVPAG и установить его на секцию .const. На выходе предшествующая величина PSVPAG будет восстановлена. Например:

void

attribute__((interrupt, auto_psv)) myISR()

{

 

 

/* Эта функция может

ссылаться на константные переменные и

строковые литералы в

модели памяти constants-in-code */

}

 

 

предположит наличие auto_psv и будет вставлять необходимые команды, чтобы гарантировать правильную работу на этапе исполнения. Будет также выдано предупреждение. Предупреждение поможет бдительным пользователям с проблемой переноса и с возможностью уменьшить время ожидания прерывания, используя атрибут no_auto_psv.

DS51284H(ru) стр. 8-18

© 2008 Microchip Technology Inc.

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