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

Приложение D Компиляторы Си PIC18 и PIC24/dsPIC

Примечание Компилятор для 16-битовых устройств не поддерживает непосредственный доступ к переменным в программной памяти. Доступ к размещенным таким образом переменным должен быть явно организован программистом, обычно с использованием inline ассемблерных команд работы с таблицами или с помощью окна видимости пространства программ. См. п. 4.14. «Использование видимости программного пространства (PSV)»»

ПРИМЕР D-7. РАЗМЕЩЕНИЕ ФУНКЦИИ PRINTSTRING ПО АДРЕСУ

 

 

0X8000 ПАМЯТИ ПРОГРАММ

.

 

 

PIC18

#pragma code myText_section=0x8000;

 

 

 

int PrintString(consr char *s)

A

 

 

 

 

 

 

 

 

 

{...};

 

 

 

 

 

 

 

 

 

 

16 бит

int __attribute__((address(0x8000))) PrintString (consr char *s)

 

 

 

{...};

 

Wilson

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИМЕР D-8. КОМПИЛЯТОР АВТОМАТИЧЕСКИ СОХРАНЯЕТ И

 

 

 

ВОССТАНАВЛИВАЕТ ПЕРЕМЕННЫЕ VAR1 И VAR2

 

 

 

 

 

PIC18

#pragma interrupt isr0 save=var1, var2

 

 

 

void isr0(void)

 

 

 

 

 

 

{

 

 

 

 

 

 

 

/* реализация функции обработки прерывания */

 

 

 

}

 

 

 

 

 

 

 

 

 

 

16 бит

void __attribute__((__interrupt__(__save__(var1,var2))))

 

 

 

isr0(void)

by

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

/* реализация функции обработки прерывания */

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Translated

 

 

 

 

 

D.14. Модели памяти

 

 

 

 

 

Компилятор для PIC18 использует несовместимые с ANSI малую и большую модели памяти. В малой применяются указатели длиной 16 битов и размеры памяти программ ограничены 64К байт (32К слов).

Компилятор для 16-битовых устройств использует несовместимую с ANSI малую и большую модели кода. Малая модель кода ограничивает объем памяти программ 96К байтами (32К слов). В большой модели кода указатели могут работать через таблицу переходов.

D.15. Соглашения о вызове

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

D.16. Код запуска

Компилятор для PIC18 предоставляет три варианта стартовых программ — один без инициализации данных, второй с инициализацией только тех переменных, которые этого требуют, и последний с инициализацией всех переменных (переменные, в определении которых нет инициализации, инициализируются 0, как того требует стандарт ANSI).

Компилятор для 16-битовых устройств предоставляет два варианта старта — один без инициализации, а второй с инициализацией всех переменных (переменные, в определении которых нет инициализации, инициализируются 0, как того требует стандарт ANSI), за исключением секции «устойчивых» данных.

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. D-5

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

D.17. Управляемые компилятором ресурсы

Компилятор для PIC18 управляет следующими ресурсами: PC, WREG, STATUS, PROD, секцию .tmpdata, секцию .MATH_DATA, FSR0, FSR1, FSR2, TBLPTR, TABLAT.

Компилятор для 16-битовых устройств управляет следующими ресурсами: W0-W15, RCOUNT, SR.

D.18. Оптимизация

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

ТАБЛИЦА D-6. СПОСОБЫ ОПТИМИЗАЦИИ

 

.

 

 

 

 

 

Компилятор MPL B®

Си для

 

 

A

 

 

микроконтр. PIC18

 

 

16-битовых устройств

 

 

 

Ветвление (–Ob+)

Установки оптимизации (–On, где n это 1, 2, 3 или

Линеаризация кода (–Os+)

)(1)

 

 

 

Слияние окончаний (–Ot+)

 

 

 

 

Удаление недостижимого кода (–Ou+)

 

 

 

Распространение кода (–Op+)

 

 

 

 

Изъятие избыточной памяти (–Or+)

 

 

 

 

Удаление мертвого кода (–Od+)

 

 

 

 

 

 

 

Слияние дубликатов строк (–Om+)

–fwritable-strings

 

 

 

Управление банками (–On+)

Отсутствует, т.к. нет разделения памяти на банки

 

 

 

Отслеживание содержимого WREG

Содержимое всех регистров отслеживается

(–Ow+)

Wilson

 

 

 

автоматически

Процедурная абстракция (–Opa+)

Процедурная абстракция (–mpa)

Примечание 1. Данные установкиby оптимизации удовлетворяют многие потребности. Для «тонкой настройки» могут использоваться дополнительные флаги.

Подробности см. в п. 3.5.6. «Опции для управления оптимизацией»

D.19. ФорматTranslatedобъектных модулей

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

D.20. Определяемое реализацией поведение

При сдвиге вправо отрицательных целых:

компилятор для PIC18 не расширяет знаковый бит

компилятор для 16-битовых устройств расширяет знаковый бит

D.21. Битовые поля

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

Компилятор для 16-битовых устройств поддерживает битовые поля произвольного размера вплоть до размера лежащего в основе типа. В битовом поле может быть использован любой интегральный тип. Размещение не может пересекать естественную границе лежащего в основе типа.

Например:

struct foo {

long long i:40;

int j:16;

char k:8;

} x;

DS51284H(ru) стр. D-6

© 2008 Microchip Technology Inc.

Приложение D Компиляторы Си PIC18 и PIC24/dsPIC

struct bar {

long long I:40;

char J:8;

int K:16;

} y;

Структура foo будет иметь размер 10 байтов при использовании компилятора для 16-битовых устройств. i будет располагаться начиная с бита со смещением 0 и до 39. Далее будет пропущено 8 бит перед j, которое будет располагаться начиная с

расположено после j с битовым смещением 64. Структура будет содержать 8

бита номер 48. Если бы j располагалось сразу в следующем доступном бите со смещением 40, оно бы пересекало границу памяти. для 16-битового целого. k будет

битовый пропуск в конце, чтобы удовлетворять требованиям выравнивания в случае

массива. Выравнивание составляет 2 байта,A

поскольку максимальное

Wilson

 

выравнивание в структуре именно 2 байта.

 

Структура bar будет иметь размер 8 байтов при использовании компилятора для 16битовых устройств. I будет располагаться начиная с бита со смещением 0 и до 39. Пропуск перед J в данном случае не нужен, поскольку char J, расположенное со смещения 40 битов, не будет пересекать границу памяти. K может располагаться начиная с битового смещения 48, завершая структуру без каких-либо пропусков.

by Translated

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. D-7

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

Для заметок.

A . Wilson by Translated

DS51284H(ru) стр. D-8

© 2008 Microchip Technology Inc.

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