
- •Глава 1. Сведения о компиляторе
- •1.1.Введение
- •1.2. Основные вопросы
- •1.3. Описание компилятора и документация
- •1.4. Компилятор и другие средства разработки
- •1.5. Набор возможностей компилятора
- •1.5.1. Стандарт ANSI Си
- •1.5.2. Оптимизация
- •1.5.3. Поддержка стандартной ANSI библиотеки
- •1.5.4. Гибкие модели памяти
- •1.5.5. Драйвер компилятора
- •Глава 2. Отличия 16-битового компилятора от ANSI
- •2.1. Введение
- •2.2. Основные вопросы
- •2.3. Отличия ключевых слов
- •2.3.1. Определение атрибутов переменных
- •2.3.2. Определение атрибутов функций
- •2.3.3. Inline функции
- •2.3.4. Переменные в определенных регистрах
- •2.3.4.1. Определение глобальных регистровых переменных
- •2.3.4.2. Определение локальных регистровых переменных
- •2.3.5. Комплексные числа
- •2.3.6. Целые размером в двойное слово
- •2.3.7. Ссылки на тип с помощью typeof
- •2.4. Отличия операторов
- •2.4.1. Метки как значения
- •2.4.2. Условные операторы с опущенными операндами
- •2.4.3. Диапазоны case
- •2.5. Отличия выражений
- •2.5.1. Двоичные константы
- •Глава 3. Использование компилятора в командной строке
- •3.1. Введение
- •3.2. Основные вопросы
- •3.3. Обзор
- •3.4. Соглашение для имен файлов
- •3.5. Опции
- •3.5.1. Опции, специфические для устройств dsPIC
- •3.5.2. Опции для управления типом результатов
- •3.5.3. Опции для управления диалектом Cи
- •3.5.5. Опции для отладки
- •3.5.6. Опции для управления оптимизацией
- •3.5.7. Опции для управления препроцессором
- •3.5.8. Опции для ассемблера
- •3.5.9. Опции для компоновщика
- •3.5.10. Опции для поиска в каталогах
- •3.5.11. Опции для соглашений по генерации кода
- •3.6. Переменные окружения
- •3.7. Предопределенные имена макро
- •3.9. Компиляция нескольких файлов в командной строке
- •3.10. Особенные символы
- •Глава 4. Среда периода исполнения
- •4.1. Введение
- •4.2. Основные вопросы
- •4.3. Адресное пространство
- •4.4. Запуск и инициализация
- •4.5. Пространства памяти
- •4.6. Модели памяти
- •4.6.1. Ближние и дальние данные
- •4.6.2. Ближний и дальний код
- •4.7. Расположение кода и данных
- •4.8. Программный стек
- •4.9. Использование стека в Си
- •4.11. Соглашения по вызову функций
- •4.11.1. Параметры функции
- •4.11.2. Возвращаемое значение
- •4.12. Соглашения о регистрах
- •4.13. Двоичная инверсия и модульная адресация
- •4.14.1. Загрузочные и защищенные константы
- •4.14.2. Строковые константы как аргументы
- •4.14.3. Переменные с квалификатором const в безопасной Flash
- •4.14.4. Модель совместимости объектов
- •Глава 5. Типы данных
- •5.1. Введение
- •5.2. Основные вопросы
- •5.3. Представление данных
- •5.4. Целые
- •5.5. С плавающей точкой
- •5.6. Указатели
- •Глава 6. Дополнительные типы указателей Си
- •6.1. Введение
- •6.2. Управляющие PSV указатели
- •6.2.1. Определение данных для управления доступом PSV
- •6.2.2. Управляемый доступ PSV
- •6.2.3. Рассмотрение ISR
- •6.3. PMP указатели
- •6.3.1. Инициализация PMP
- •6.3.2. Объявление нового пространства памяти
- •6.3.3. Определение переменных в пространстве PMP
- •6.4. Внешние указатели
- •6.4.1. Объявление нового пространства памяти
- •6.4.2. Определение переменных во внешнем пространстве
- •6.4.3. Определение способа доступа к пространству памяти
- •6.4.3.2. Функции записи
- •6.4.4. Пример внешней памяти
- •Глава 7. Файлы поддержки устройства
- •7.1. Введение
- •7.2. Основные вопросы
- •7.3. Файлы заголовков процессора
- •7.4. Файлы определения регистров
- •7.5. Использование SFR
- •7.6. Использование макросов
- •7.6.1. Макросы настройки битов конфигурации
- •7.6.2. Макросы использования ассемблера inline
- •7.6.3. Макросы выделения памяти данных
- •7.6.4. Макросы объявления ISR
- •7.7. Адресация EEDATA из Си - только для dsPIC30F
- •7.7.1. Доступ к EEDATA через PSV
- •7.7.2. Доступ к EEDATA посредством команд TBLRDx
- •7.7.3. Дополнительные источники информации
- •Глава 8. Прерывания
- •8.1. Введение
- •8.2. Основные вопросы
- •8.3. Написание программы обработки прерывания
- •8.3.1. Рекомендации по написанию ISR
- •8.3.3. Кодирование ISR
- •8.3.4. Использование макросов для объявления простых ISR
- •8.4. Запись вектора прерывания
- •8.4.1. Вектора прерываний dsPIC30F (без SMPS)
- •8.4.3. Вектора прерываний PIC24F
- •8.4.4. Вектора прерываний dsPIC33F/PIC24H
- •8.5. Сохранение контекста в ISR
- •8.7. Вложенные прерывания
- •8.8. Разрешение/запрещение прерываний
- •8.9. Разделение памяти между основной программой и ISR
- •8.9.1. Разработка проблем
- •8.9.2. Разработка решений
- •8.9.3. Пример приложения
- •8.10. Использование PSV в ISR
- •Глава 9. Совместное использование ассемблера и Си
- •9.1. Введение
- •9.2. Основные вопросы
- •9.3. Смесь переменных и функций на ассемблере и Си
- •9.4. Использование ассемблера inline
- •Приложение A. Определяемое реализацией поведение
- •A.12. Квалификаторы
- •A.13. Деклараторы
- •A.14. Операторы
- •A.17. Сигналы
- •A.18. Потоки и файлы
- •A.20. Errno
- •A.22. Abort
- •A.23. Exit
- •A.24. Getenv
- •A.25. Система
- •A.26. Strerror
- •Приложение B. Встроенные функции
- •B.2. Список встроенных функций
- •Приложение C. Диагностика
- •Приложение D. Компиляторы Си PIC18 и PIC24/dsPIC
- •D.6. Использование стека
- •D.11. Банк доступа
- •D.12. Inline ассемблер
- •D.13. Прагмы
- •D.14. Модели памяти
- •D.15. Соглашения о вызове
- •D.16. Код запуска
- •D.17. Управляемые компилятором ресурсы
- •D.18. Оптимизация
- •D.20. Определяемое реализацией поведение
- •D.21. Битовые поля

Глава 7. Файлы поддержки устройства
#define _XBSS(N) __attribute__((space(xmemory), aligned(N))) #define _XDATA(N) __attribute__((space(xmemory), aligned(N))) #define _YBSS(N) __attribute__((space(ymemory), aligned(N))) #define _YDATA(N) __attribute__((space(ymemory), aligned(N))) #define _EEDATA(N) __attribute__((space(eedata), aligned(N)))
Например, чтобы объявить неинициализируемый массив в память X с выравниванием на 32-байтовый адрес:
|
|
int _XBSS(32) xbuf[16]; |
|
. |
|
|
|
|
|
|
|
|
|
|
|
Чтобы объявить инициализируемый массив в EEPROM данных без специального |
||||
|
|
выравнивания: |
|
|
|
|
|
|
int _EEDATA(2) table1[] = {0, 1, 1, 2, 3, 5, 8, 13, 21}; |
||||
|
|
Следующие макросы не требуют аргументов. ОниA |
могут быть использованы, чтобы |
|||
|
|
|
|
Wilson |
|
|
|
|
располагать переменную в «устойчивой» или в ближней памяти данных. |
||||
|
|
#define _PERSISTENT __attribute ((persistent)) |
||||
|
|
#define _NEAR __attribute ((near)) |
|
|
||
|
|
Например, чтобы объявить две переменные, которые сохраняют свои величины при |
||||
|
|
сбросе устройства: |
|
|
|
|
|
|
int _PERSISTENT var1,var2; |
|
|
||
|
|
7.6.4. Макросы объявления ISR |
|
|
||
|
|
Следующие макросы могут быть использованы для декларации ISR: |
||||
|
|
|
by |
|
|
|
|
|
#define _ISR __attribute__((interrupt)) |
|
|
||
|
|
#define _ISRFAST __attribute__((interrupt, shadow)) |
||||
|
|
Например, чтобы объявить ISR для прерываний от timer1: |
||||
|
|
void _ISR _T1Interrupt(void); |
|
|
||
|
|
Translated |
|
|
|
|
|
|
Чтобы объявить ISR для прерывания от SPI1 с быстрым сохранением контекста: |
||||
|
|
void |
ISRFAST SPI1Interrupt(void); |
|
|
|
|
|
Примечание ISR будет установлена в таблицы векторов прерываний |
||||
|
|
|
автоматически, если используются зарезервированные имена, |
|||
|
|
|
приведенные в п. 8.4 «Запись векторов прерываний». |
|||
7.7. |
Адресация EEDATA из Си - только для dsPIC30F |
|||||
|
|
Компилятор предлагает несколько удобных макроопределений для размещение |
||||
|
|
данных в области EEPROM данных. Это можно делать довольно просто: |
||||
|
|
int |
EEDATA(2) user_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; |
|||
|
|
user data будет размещен в пространстве данных EEPROM резервированием 10 |
||||
|
|
слов с заданными начальными величинами. |
|
|
Устройство dsPIC предоставляет программисту два способа доступа к этой области памяти. Первый — через окно видимости программного пространства. Второй — с использованием специальных команд (TBLRDx).
7.7.1. Доступ к EEDATA через PSV
Компилятор обычно управляет окном PSV так, чтобы иметь доступ к константам, хранящимся в программной памяти. Если это не тот случай, окно PSV может быть использовано для доступа к памяти EEPROM данных.
Чтобы использовать окно PSV:
•регистр PSVPAG должен быть установлен на соответствующий адрес для доступа
кпрограммной памяти. Для EEPROM данных это будет 0xFF, но лучше всего использовать функцию __builtin_psvpage().
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. 7-5 |

16-битовый компилятор Си. Руководство
•окно PSV должно также быть открыто установкой бита PSV в регистре CORCON. Если этот бит не установлен, из окна PSV всегда читается 0x0000.
ПРИМЕР 7-2. ДОСТУП К EEDATA ЧЕРЕЗ PSV
#include <p30fxxxx.h> int main(void) {
PSVPAG = __builtin_psvpage(&user_data);
CORCONbits.PSV = 1;
/* ... */ |
. |
|
|
if (user_data[2]) ;/* какие-то действия */ |
|
} |
|
Эти действия требуется проделать только одинA |
раз. Если PSVPAG не изменится, |
Wilson |
|
переменные в пространстве EEdata можно читать ссылаясь на них как на обычные переменные Cи, как показано в примере.
Примечание Эта модель доступа несовместима с моделью, когда компилятор сам управляет PSV (-mcon t-in-code). Следует быть осторожными, чтобы избежать конфликта.
7.7.2. Доступ к EEDATA посредством команд TBLRDx
Команды TBLRDx непосредственно не поддерживаются компилятором, но они могут быть использованы через inline ассемблер. Подобно доступу через PSV,
часть команды. Чтобы получить доступ в ту же память, что и в предшествующем примере, можно использовать следующий код:
23-битовый адрес формируетсяby из величины SFR и адреса закодированного как
Чтобы использовать инструкции TBLRDx:
• РегистрTranslatedTBLPAG должен быть установлен в необходимый адрес для доступа к программной памяти. Для EEdata это будет 0x7F, но лучше всего использовать
• Команда TBLRDx может использоваться из оператора __asm__ или с помощью
одной из функций builtin_tblrd; см. «dsPIC30F/33F Programmer’s Reference Manual» (DS70157) для информации об этой команде.
asm ("tblrdl [%1], %0" : "=r"(eedata_val) : "r"(eedata_addr)); \
dest = eedata_val; |
\ |
} |
|
int main(void) { |
|
int value; |
|
TBLPAG = __builtin_tblpage(&user_data);
eedata_read(user_data,2*sizeof(user_data[0]), value); if (value) ; /* do something */
}
DS51284H(ru) стр. 7-6 |
© 2008 Microchip Technology Inc. |

Глава 7. Файлы поддержки устройства
7.7.3. Дополнительные источники информации
В разделе 5 «dsPIC30F Family Reference Manual» (DS70046), есть отличное обсуждение использования программной Flash памяти и памяти EEdata, предоставляемых устройствами dsPIC. Там также есть информация о записи в программную память и память EEdata на этапе исполнения.
A . Wilson by Translated
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. 7-7 |

16-битовый компилятор Си. Руководство
Для заметок.
A . Wilson by Translated
DS51284H(ru) стр. 7-8 |
© 2008 Microchip Technology Inc. |