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

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

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

D.1.

D.2.

Введение

Цель этой главы в том, чтобы подчеркнуть различия между компилятором MPLAB Cи

для PIC18 (бывший MPLAB C18) и компилятором MPLAB Cи для PIC24 и dsPIC®

 

 

.

(бывший MPLAB C30). За дополнительной информацией о компиляторе для PIC18

обращайтесь к «MPLAB® C18 C Compiler User’s Guide» (DS51288).

Основные вопросы

Wilson

A

В данной главе обсуждаются следующие области различий между двумя

компиляторами:

 

 

Форматы данных

 

 

Указатели

 

 

Классы памяти

 

 

Использование стека

 

 

Квалификаторы памяти

 

 

Предопределенные имена макро

 

Приведение целых

by

 

 

 

Строковые константы

 

 

Банк доступа

 

 

Inline ассемблер

 

 

Translated

 

 

Прагмы

Модели памяти

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

Код запуска

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

Оптимизация

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

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

Битовые поля

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. D-1

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

D.3.

D.4.

D.5.

Форматы данных

ТАБЛИЦА D-1. КОЛИЧЕСТВО БИТОВ В ФОРМАТАХ ДАННЫХ

Формат данных

Компилятор MPLAB® Си для

 

микроконтр. PIC18(1)

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

 

 

 

 

char

8

 

8

int

16

 

16

 

 

 

 

short long

24

 

 

 

 

 

long

32

.

32

 

 

 

 

 

long long

A

32

 

 

 

 

 

float

32

 

32

 

 

 

 

double

32

 

32 или 64(3)

Примечания 1: Компилятор для PIC18 использует собственный формат данных, подобный формату IEEE-754, но с циклическим сдвигом старших 9 битов (см. таблицу D-2)

2: Компилятор для 16-битовых устройств использует формат IEEE-754 3: См. п. 5.5. «С плавающей точкой»

ТАБЛИЦА D-2. СРАВНЕНИЕ ФОРМАТОВ С ПЛАВАЮЩЕЙ ТОЧКОЙ И IEEE-754

 

 

Стандарт

 

 

Байт 3

Байт 2

 

Байт 1

 

Байт 0

 

 

 

 

 

 

 

 

 

 

 

 

 

Компилятор для PIC18

 

 

eeee eeee0

sddd dddd16

 

dddd dddd8

 

dddd dddd0

 

 

 

 

 

Wilson

 

 

 

 

 

 

 

Компилятор для 16-бит. устройств

 

seee eeee1

e0ddd dddd16

 

dddd dddd8

 

dddd dddd0

 

 

Условные обозначения: s = знаковый бит, d = мантисса, e = порядок

 

Указатели

by

 

 

 

 

 

 

 

ТАБЛИЦА D-3. КОЛИЧЕСТВО БИТОВ В УКАЗАТЕЛЯХ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип памяти

 

 

 

Компилятор MPLAB® Си для

 

 

 

 

 

 

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

 

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

 

 

 

 

 

 

 

 

 

 

Память программ, ближний

 

 

 

16

 

16

 

 

Память программ, дальний

 

 

 

24

 

16

 

 

 

 

 

 

 

 

 

 

 

Память данных

 

 

 

16

 

16

 

 

 

Translated

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Классы памяти

Компилятор для PIC18 позволяет использовать не совместимые с ANSI спецификаторы классов памяти overlay для переменных и auto или static для аргументов функций.

Компилятор для 16-битовых устройств не допускает эти спецификаторы.

DS51284H(ru) стр. D-2

© 2008 Microchip Technology Inc.

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

D.6. Использование стека

D.7.

D.8.

D.9.

D.10.

ТАБЛИЦА D-4. ИСПОЛЬЗУЕМЫЙ ТИП СТЕКА

Содержание стека

Компилятор MPLAB® Си для

 

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

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

 

 

 

Адреса возврата

аппаратный

программный

Локальные переменные

программный

программный

 

 

 

Квалификаторы памяти

Компилятор для PIC18 использует несовместимые с ANSI квалификаторы far,

near, rom и ram.

A

.

 

 

 

 

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

far, near и space.

 

 

ПРИМЕР D-1. ОПРЕДЕЛЕНИЕ БЛИЖНЕЙ ПЕРЕМЕННОЙ

 

 

 

 

PIC18

near int gVariable;

 

 

 

 

16 бит

__attribute__((near)) int gVariable;

 

 

ПРИМЕР D-2. ОПРЕДЕЛЕНИЕ ДАЛЬНЕЙ ПЕРЕМЕННОЙ

 

 

 

 

PIC18

far int gVariable;

 

 

 

 

 

16 бит

__attribute__((far)) int gVariable;

 

 

 

Wilson

 

ПРИМЕР D-3. СОЗДАНИЕ ПЕРЕМЕННОЙ В ПАМЯТИ ПРОГРАММ

 

 

 

PIC18

rom int gArray[6] = {0,1,2,3,4,5};

 

 

 

16 бит

__attribute__((space(psv))) cons int gArray[6] = {0,1,2,3,4,5};

 

by

 

 

ПредопределенныеTranslatedимена макро

В компиляторе для PIC18 определены __18CXX, __18F242, ... (все остальные процессоры с префиксом __ ), а также __SMALL__ и __LARGE__, зависящие от выбранной модели памяти.

В компиляторе для 16-битовых устройств определено __dsPIC30.

Приведение целых

Компилятор для PIC18 реализует приведение целых к размеру наибольшего целого операнда, даже если оба операнда меньше, чем int. Для обеспечения действий в соответствии со стандартом используется опция –Oi+.

Компилятор для 16-битовых устройств реализует приведение целых к точности int или большей в соответствии с требованиями ISO.

Строковые константы

Компилятор для PIC18 сохраняет строковые константы в памяти программ в секции

.stringtable. Этот компилятор поддерживает отдельные варианты строковых функций. Например, функция strcpy имеет 4 варианта, позволяющих копировать строки в или из памяти данных и программ.

Компилятор для 16-битовых устройств организует доступ к строковым константам в памяти данных или в памяти программ через окно PSV, делая их доступными наряду с другими данными.

D.11. Банк доступа

16-битовые устройства не имеют банка доступа к памяти.

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. D-3

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

D.12. Inline ассемблер

Компилятор для PIC18 использует несовместимый с ANSI операторы _asm и _endasm для идентификации блока inline ассемблера.

Компилятор для 16-битовых устройств использует несовместимый с ANSI оператор asm, который больше похож на вызов функции. Подробнее об использовании оператора asm см. п. 9.4. «Использование ассемблера inline»

D.13. Прагмы

Компилятор для PIC18 использует прагмы для секций (code, romdata, udata,

idata), прерываний (высокого или низкого приоритета) и размещения переменных

(банк и секция).

 

.

 

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

вместо прагм.

 

A

 

 

 

 

ТАБЛИЦА D-5. ПРАГМЫ И АТРИБУТЫ

 

 

 

 

 

Прагмы (компилятор для PIC18)

Атрибуты (компилятор для 16-битовых

 

устройств)

 

 

 

 

 

 

 

#pragma udata [name]

 

attribute__

((section (“name”)))

 

 

 

 

#pragma idata [name]

 

attribute__

((section (“name”)))

 

 

 

 

#pragma romdata [name]

 

attribute__

((space (prog)))

 

 

 

 

#pragma code [name]

 

attribute__

((section (“name”))),

 

Wilsonattribute__

((space (prog)))

#pragma interruptlow

 

__attribute__

((intrrupt))

 

 

 

 

#pragma interrupt

 

__attribute__

((interrupt, shadow))

 

 

 

 

#pragma varlocate bank

 

нет(1)

 

by

 

 

 

#pragma varlocate name

 

нет(1)

 

Примечание 1: 16-битовые устройства не имеют разделения памяти по банкам.

ПРИМЕР D-4. ОПРЕДЕЛЕНИЕ НЕИНИЦИАЛИЗИРУЕМОЙ ПЕРЕМЕННОЙ В СЕКЦИИ ПОЛЬЗОВАТЕЛЯ ПАМЯТИ ДАННЫХ

PIC18

#pr gma udata mybss

 

int gi;

 

 

16 бит

int attribute__((__section__(“.mybss”))) gi;

 

 

ПРИМЕР D-5. РАЗМЕЩЕНИЕ ПЕРЕМЕННОЙ MABONGA ПО АДРЕСУ 0X100 ПАМЯТИ ДАННЫХ

PIC18

#pragma idata myDataSection=0x100;

 

int

Mabonga = 1;

 

 

 

16 бит

int

attribute__((address(0x100))) Mabonga = 1;

Translated

ПРИМЕР D-6. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОЙ В ПАМЯТИ ПРОГРАММ

 

 

PIC18

#pragma romdata const_table

 

const

rom char my_const_array[10] =

 

{0,1,2,3,4,5,6,7,8,9};

 

 

 

16 бит

const

__attribute__((space(auto_psv)))

 

char my_const_array[10] = {0,1,2,3,4,5,6,7,8,9};

 

 

 

DS51284H(ru) стр. D-4

© 2008 Microchip Technology Inc.

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