- •Глава 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. Битовые поля
Глава 4. Среда периода исполнения
ymemory - только для dsPIC30F/33F DSCs
Пространство данных Y. Переменные в пространстве данных Y доступны с помощью обычных операторов Си. Адресное пространство Y данных имеет специальное значение для DSP-ориентированных библиотек и команд ассемблера.
prog
|
|
Общее программное пространство, которое обычно резервируется для |
||||||||
|
|
исполняемого кода. Переменные в программном пространстве не могут быть |
||||||||
|
|
доступные с использованием обычных операторов Си. Доступ к ним должен быть |
||||||||
|
|
явно организован программистом, обычно с использованием inline команд |
||||||||
|
|
ассемблера для доступа к таблицам, или с использованием окна видимости |
||||||||
|
|
программного пространства. |
|
|
|
A |
. |
|
||
|
|
auto_psv |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
Управляемая |
компилятором |
область |
|
|
||||
|
|
в программном пространстве, |
||||||||
|
|
предназначенная для доступа через окно видимости программного пространства. |
||||||||
|
|
Переменные в этом пространстве могут быть прочитаны (но не записаны) с |
||||||||
|
|
использованием обычных операторов Си и должны быть пригодными к размещению |
||||||||
|
|
в пространстве максимальным размером 32К. |
|
|
|
|||||
|
|
psv |
|
|
|
|
|
|
|
|
|
|
Программное пространство, предназначенное для доступа через окно видимости |
||||||||
|
|
программного пространства. Переменные в пространстве PSV не управляются |
||||||||
|
|
компилятором и не могут быть доступны с использованием обычных операторов Си. |
||||||||
|
|
Доступ к ним |
должен быть Wilsonявно организован программистом, обычно с |
|||||||
|
|
использованием inline команд ассемблера или с использованием окна видимости |
||||||||
|
|
программного пространства. Переменные в пространстве PSV могут быть доступны |
||||||||
|
|
с использованием однократной установки регистра PSVPAG. |
||||||||
|
|
eedata - только для dsPIC30F/dsPIC33Fby |
|
|
|
|
||||
|
|
Пространство данных EEPROM, область 16-битовой энергонезависимой памяти, |
||||||||
|
|
расположенный в старших адресах программной памяти. Переменные в |
||||||||
|
|
пространстве eedata не могут быть доступны с использованием обычных операторов |
||||||||
|
|
Си. Доступ к ним должен быть явно организован программистом, обычно с |
||||||||
|
|
использованием inline команд ассемблера для доступа к таблицам, или с |
||||||||
|
|
использованием окна видимости программного пространства. |
||||||||
|
|
dma - только для PIC24H и ds PIC33F |
|
|
|
|
||||
|
|
Память DMA. Переменные в DMA памяти могут быть доступные с использованием |
||||||||
|
|
обычных операторов Си и периферии DMA. |
|
|
|
|||||
4.6. |
Модели памяти |
|
|
|
|
|
|
|
|
|
|
|
Компилятор поддерживает ряд моделей памяти. Имеются опции командной строки |
||||||||
|
|
для выбора оптимальной модели памяти для вашего приложения на основе |
||||||||
|
|
специфики используемой микросхемы устройства dsPIC и типа памяти. |
||||||||
|
|
Translated |
|
|
|
|
|
|
||
|
|
ТАБЛИЦА 4-1. ОПЦИИ ВЫБОРА МОДЕЛИ ПАМЯТИ |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Опция |
|
Определение памяти |
|
|
|
|
Описание |
|
|
|
|
|
|
|
|
|
|||
|
|
-msmall-data |
|
До 8 Кб памяти |
|
|
Разрешает использования аналогичных PIC18 |
|||
|
|
|
|
данных. Умолчание |
команд для доступа к памяти данных. |
|||||
|
|
|
|
|
|
|
|
|||
|
|
-msmall-scalar |
|
До 8 Кб памяти |
|
|
Разрешает использования аналогичных PIC18 |
|||
|
|
|
|
|
|
команд для доступа к скалярным данным в |
||||
|
|
|
|
данных. Умолчание |
|
|||||
|
|
|
|
|
памяти. |
|
|
|||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||||
|
|
-mlarge-data |
|
Более 8 Кб памяти |
|
Использует косвенные ссылки на данные. |
||||
|
|
|
|
данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. 4-3 |
16-битовый компилятор Си. Руководство
ТАБЛИЦА 4-1. (ПРОД-Е) ОПЦИИ ВЫБОРА МОДЕЛИ ПАМЯТИ
Опция |
Определение памяти |
Описание |
|
|
|
-msmall-code |
До 32 К слов памяти |
Указатели функций не используют таблицу |
|
переходов. Для вызова функций используется |
|
|
программ. Умолчание |
|
|
команда RCALL. |
|
|
|
|
-mlarge-code |
Более, чем 32 К слов |
Указатели функций могут использовать |
|
таблицу переходов. Для вызова функций |
|
|
памяти программ. |
|
|
используется команда CALL. |
|
|
|
|
|
|
|
-mconst-in-data |
Константы располо- |
Значения копируются в память данных из |
|
. |
|
|
жены в памяти данных |
программной памяти при средствами |
|
|
стартового кода. |
|
|
|
-mconst-in-code |
Константы располо- |
Значения доступны через окно видимости |
|
жены в памяти |
памяти программ (PSV). |
|
программ. Умолчание. |
A |
|
Wilson |
|
Опции командной строки применимы глобально ко всем компилируемым модулям. Для улучшения генерируемого кода переменные и функции могут быть выборочно объявлены near или far. Подробнее об индивидуальных установках для переменных и функций см. п. 2.3.1. «Определение атрибутов переменных» и п. 2.3.2. «Определение атрибутов функций».
4.6.1. Ближние и дальние данные
Если переменные располагаются в ближней секции данных, компилятор чаще имеет возможность генерации лучшего (более компактного) кода, чем если бы переменные там не располагались. Если все переменные приложения можно уместить в пределах 8Кбby ближних данных, то компилятор можно запросить размещение их там задав опцию командной строки по умолчанию -msmall-data при компиляции каждого модуля. Если объем данных всех скалярных типов
приложения.
(массивов и структур) меньше 8Кб, может быть использована опция по умолчанию -msmallTranslated-scalar. Ее запрашивают, чтобы компилятор организовал память так, чтобы именно скаляры располагались в секции ближних данных распределяемого
Если ни одна из этих глобальных опций не подходит, тогда возможны следующие альтернативы.
1. Возможно компилировать отдельные модули приложения с опциями командной строки -mlarge-data и -mlarge-scalar. В этом случае только переменные, используемые в таких модулях, будут располагаться в дальней области памяти. При использовании данной альтернативы следует обратить особое внимание на внешние переменные. Если переменная, используемая модулем, откомпилированным с такими опциями, определена как внешняя, то модуль, в котором она определена, также должен быть откомпилирован с такими опциями либо объявление или определение переменной должно быть снабжено атрибутом far.
2. Если использованы опции командной строки -mlarge-data и -mlarge-scalar, то отдельные переменные можно исключить из пространства данных far с помощью атрибута near.
3. Вместо использования опций командной строки, воздействующих на модуль целиком, можно поместить отдельные переменные в дальнюю область данных с помощью атрибута far.
Компоновщик выдаст сообщение об ошибке, если все ближние переменные не помещаются в ближайшие 8К пространства данных.
4.6.2. Ближний и дальний код
Ближние функции (находящиеся в пределах 32К слов вверх или вниз друг от друга) могут вызывать друг друга более эффективно, чем тех, расстояние до которых
DS51284H(ru) стр. 4-4 |
© 2008 Microchip Technology Inc. |