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

Руководство пользователя по MPLAB® компилятору Си для PIC24 и dsPIC®

Глава 6. Дополнительные типы указателей Си

6.1.Введение

Компилятор MPLAB Си для PIC24 и dsPIC® (бывший C30), предлагает несколько

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

к уникальным

 

.

Данная глава

возможностям архитектуры 16-битовых устройств Microchip.

 

A

 

посвящена расширенным указателям и их использованию.

 

Управляющие PSV указатели — для чтения большего количества данных через

PSV

Wilson

 

 

 

PMP указатели — для доступа к данным через периферию PMP (где возможно)

•Внешние указатели — для доступа к внешней памяти средствами, определенными пользователем

Хотя основное внимание будет сосредоточено на доступе к указателю, но также охвачено определение переменных и обеспечение расположения данных в правильной области памяти 16-битовых архитектур.

Эта глава использует понятия, введенные в Главе 2. «Отличия 16-битового компилятора от ANSI».

6.2.Управляющие PSV указатели

Семейства процессоров dsPIC30F/33F и PIC24F/H содержат аппаратные средства

поддержки доступа к даннымby

в программной Flash памяти, использующие

Translated

 

аппаратную особенность, которую обычно называют «видимость программного пространства» (PSV). Более подробно о работе PSV можно узнать из документации на устройство или руководства по семейству. Также, см. п. 4.14. «Использование видимости программного пространства (PSV)» и п. 8.10. «Использование PSV в ISR».

Не вдаваясь в подробности, архитектура позволяет отображать одну 32К страницу Flash памяти в верхние адреса пространства данных используя специальный регистр (SFR) PSVPAG. По умолчанию компилятор поддерживает прямой доступ только к одной единственной PSV странице, известной как пространство auto_psv. В этой модели можно использовать 16-битовые указатели. Однако, на устройствах с памятью большего размера, это может затруднить управление большими объемами постоянных данных, хранящихся во Flash.

Описываемые здесь расширения разрешают определение переменной как «управляющей» переменной PSV. Это означает, что компилятор будет манипулировать и смещением (в пределах страницы PSV), и самой страницей. Как следствие, указатели данных должны быть 32-битовыми. Компилятор, вероятно, будет генерировать больше команд, чем для одностраничной модели PSV, но это цена большей гибкости и меньшего времени кодирования при получении доступа к большим объемам данных во Flash.

6.2.1. Определение данных для управления доступом PSV

Глава 2. «Отличия 16-битового компилятора от ANSI» вводит расширения Cи, которые допускают идентификацию дополнительной информации для переменной или функции. Компилятор предоставляет атрибут space для помещения переменных в разные области (пространства) памяти.

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 6-1

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

Например, чтобы поместить переменную в пространство auto_psv, т.е. выделить во Flash участок памяти, легкодоступный через единственную установку регистра PSVPAG, достаточно определить:

unsigned int FLASH_variable __attribute__((space(auto_psv)));

Доступны и другие пользовательские пространства, которые имеют отношение к Flash:

space(psv) — пространство PSV, к которому компилятор не имеет автоматического доступа

space(prog) — некоторая область во Flash, к которой компилятор не имеет авто-

матического доступа

 

A

 

Заметьте, что и psv, и

 

соответствующим образом

auto_psv пространства.

сблокированы или выровнены так, чтобы единственная установка PSVPAG была

пригодная для доступа ко всей переменной.

 

 

 

Wilson

 

 

6.2.2. Управляемый доступ PSV

 

 

Простое размещение чего-то во Flash с использованием атрибута space еще не означает, что компилятор будет способен управлять доступом. Компилятор требует, чтобы Вы идентифицировали переменные особым способом. Так сделано, поскольку управление PSV может быть менее эффективным, чем управление PSVPAG вручную (хотя и значительно менее сложным).

Компилятор предлагает несколько новых квалификаторов (CV-квалификаторы для языковых законников). Подобно квалификатору const-volatile, новые квалификаторы применимы к указателям или объектам. Это:

__psv__ для доступа к объектам, которые не пересекают границу PSV, как например те, что размещены в space(auto_psv) или space(psv)

__prog__ для доступа к объектам, которые могут пересекать границу PSV,

особенно тем, что размещены в space(prog), но он может быть применен и к любому объекту во Flashby

ОбычноTranslatedнет необходимости определять __psv__ или __prog__ для объекта,

расположенного в space(auto_psv), хотя и нет причины, запрещающей это делать.

Перемещение FLASH_variable, описанной в предыдущем подразделе, в обычное пространство F ash и поручение компилятору управлять пространством делается просто:

psv unsigned int FLASH_variable __attribute__((space(psv)));

Чтение переменной теперь заставит компилятор генерировать код, который настраивает SFR PSVPAG так, чтобы иметь правильный доступ к переменной. Эти же квалификаторы могут аналогично оформлять указатели:

psv unsigned int *pFLASH;

создает указатель на что-то в PSV, который может быть обычным способом использован для управления объектом PSV. Например:

pFLASH = &FLASH_variable;

6.2.3. Рассмотрение ISR

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

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

Компилятор сделает упрощающее предположение, что автор программы обслуживания прерывания будет знать, требуется или нет автоматическое

DS51284H(ru) стр. 6-2

© 2008 Microchip Technology Inc.

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