
- •Глава 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. Битовые поля

Руководство пользователя по MPLAB® компилятору Си для PIC24 и dsPIC®
Приложение A. Определяемое реализацией поведение
A.1.
A.2.
Введение
В этом приложении обсуждается |
определяемое реализацией поведение |
|
компилятора MPLAB Cи для PIC24 и dsPIC (бывшего MPLAB C30). Стандарт ISO для |
||
|
|
. |
Cи требует, чтобы поставщики специфицировали «определяемые реализацией» |
||
особенности языка. |
|
A |
Основные вопросы |
|
|
|
Wilson |
|
Вопросы, обсуждаемые в этой главе: |
|
|
• Трансляция |
|
|
• Окружение |
|
|
• Идентификаторы |
|
|
• Символы |
|
|
• Целые |
|
|
• С плавающей точкой |
by |
|
• Массивы и указатели |
|
|
|
|
|
• Регистры |
|
|
• Структуры, союзы, перечисления и битовые поля |
||
Translated |
|
|
• Квалификаторы |
|
|
• Деклараторы
• Операторы
• Директивы препроцессора
• Библиотечные функции
• Сигналы
• Потоки и файлы
• Временный файл (tmpfile)
• E no
• Память
• Abort
• Exit
• Getenv
• Система
• Strerror
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. A-1 |

16-битовый компилятор Си. Руководство
A.3.
A.4.
A.5.
Трансляция
Определяемое реализацией поведение при трансляции описывается в секции G3.1 стандарта ANSI Си.
Сохраняется ли каждая непустая последовательность символов пробела, кроме новой строки, или заменяется одним пробелом? (ISO 5.1.1.2)
Заменяется одним символом пробела.
Как идентифицировать диагностическое сообщение? (ISO 5.1.1.3)
Диагностические сообщения идентифицируются добавлением разделенных
Есть ли другие классы сообщений? (ISO 5.1.1.3). |
A |
. |
|
|
|||
Да. |
|
|
|
Если да, то какие они? (ISO 5.1.1.3) |
|
|
|
|
Wilson |
|
|
Ошибки, которые запрещают создание выходного файла, и предупреждения, |
|||
которые не запрещают создание выходного файла. |
|||
Что такое возвращаемый транслятором код состояния для каждого класса |
|||
сообщения? (ISO 5.1.1.3) |
|
|
|
символом двоеточия (':') префикса из имени исходного файла и номера строки, соответствующей сообщению.
Для ошибок возвращаемый код состояния — 1, для предупреждений — 0. |
|
Может уровень диагностики быть управляемым? (ISO 5.1.1.3). |
|
Да. |
|
Если да, какую форму принимает управление? (ISO 5.1.1.3) |
|
|
by |
Для разрешения или запрета генерации предупреждающих сообщений |
|
используются опции командной строки компилятора. |
|
Окружение |
|
Translated |
|
Определяемое реализацией поведение для окружения описывается в секции G3.2 стандарта ANSI Си.
Какие библиотечные средства доступны для автономной (freestanding) программы? (ISO 5.1.2.1)
Все средства стандартной библиотеки Cи доступны, при условии, что небольшой набор функций будет адаптирован для среды, как описано в секции «Библиотеки времени исполнения».
Опишите завершение программы в автономной среде. (ISO 5.1.2.1)
При возврате из функции main или вызове функции exit, команда HALT выполняется в бесконечном цикле. Это настраиваемое поведение.
Опишите аргументы (параметры) передаваемые в функцию main? (ISO 5.1.2.2.1)
Никаких параметров в main не передается.
Какое из следующих диалоговых устройств правомерно: (ISO 5.1.2.3)
Асинхронный терминал — нет
Пара дисплей и клавиатура — нет
Межпрограммная связь — нет
Другое, пожалуйста опишите? Нет таких
Идентификаторы
Определяемое реализацией поведение для идентификаторов описывается в секции G3.3 стандарта ANSI Си.
DS51284H(ru) стр. A-2 |
© 2008 Microchip Technology Inc. |

Приложение A Определяемое реализацией поведение
A.6.
A.7.
Сколько символов сверх тридцати одного (31) являются значимые в идентификаторе без внешней видимости? (ISO 6.1.2)
Все символы значимые.
Сколько символов сверх шести (6) являются значимые во внешнем идентификаторе? (ISO 6.1.2)
Все символы значимые.
Регистр символа имеет значение во внешнем идентификаторе? (ISO 6.1.2).
Да
Символы |
. |
|
A |
Определяемое реализацией поведение для символов описывается в секции G3.4 |
|
стандарта ANSI Си. |
Wilson |
|
Опишите подробно любой исходный символ и символ среды исполнения, которые явно не определены стандартом? (ISO 5.2.1)
Нет таких.
Перечислите значения escape последовательностей для указанных последовательностей. (ISO 5.2.2)
ТАБЛИЦА A-1. СИМВОЛЫ И ЗНАЧЕНИЯ ESCAPE ПОСЛЕДОВАТЕЛЬНОСТЕЙ
Последовательность |
Значение |
|
|
|
|
\a |
|
7 |
\b |
by |
8 |
|
||
|
|
|
\f |
|
12 |
|
|
|
\n |
|
10 |
|
|
|
\r |
|
13 |
|
|
|
Translated |
|
9 |
\t |
|
|
\v |
|
11 |
Сколько битов в символе из набора символов среды исполнения? (ISO 5.2.4.2)
8.
Как отображаются члены набора исходных символов (в символьных и строковых литералах) на члены набора символов среды исполнения? (ISO 6.1.3.4)
Тождественно.
Что такое тип, эквивалентный простому char? (ISO 6.2.1.1)
Один из двух (по выбору пользователя). По молчанию — signed char. Опция командной строки компилятора может сделать умолчанием unsigned char.
Целые
Определяемое реализацией поведение для целых описывается в секции G3.5 стандарта ANSI Си.
Следующая таблица описывает объем памяти и диапазоны различных типов целых: (ISO 6.1.2.5)
ТАБЛИЦА A-2. ЦЕЛЫЕ ТИПЫ
Описание |
Размер (биты) |
Диапазон |
|
|
|
char |
8 |
–128...127 |
signed char |
8 |
–128...127 |
|
|
|
unsigned char |
8 |
0...255 |
|
|
|
short |
16 |
–32768...32767 |
|
|
|
signed short |
16 |
–32768...32767 |
|
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. A-3 |

16-битовый компилятор Си. Руководство
ТАБЛИЦА A-2. (ПРОД-Е) ЦЕЛЫЕ ТИПЫ
|
|
Описание |
|
Размер (биты) |
|
|
Диапазон |
|
|
|
|
|
|
||
|
|
unsigned short |
|
16 |
0...65535 |
||
|
|
int |
|
16 |
–32768...32767 |
||
|
|
|
|
|
|
||
|
|
signed int |
|
16 |
–32768...32767 |
||
|
|
|
|
|
|
||
|
|
unsigned int |
|
16 |
0...65535 |
||
|
|
|
|
|
|
||
|
|
long |
|
32 |
–2147483648...2147483647 |
||
|
|
|
|
|
|
||
|
|
signed long |
|
32 |
–2147483648...2147483647 |
||
|
|
|
|
|
|
||
|
|
unsigned long |
|
32 |
0...4294867295 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
в более короткое знаковое целое, |
|
|
|
Что является результатом преобразования целого |
|||||
|
|
или результатом преобразования беззнакового целого в знаковое целое той же |
|||||
|
|
длины, если величина не может быть представлена?A |
(ISO 6.2.1.2) |
||||
|
|
|
|
Wilson |
|
|
|
|
|
Потеря значимости. Никаких сообщений об ошибках не выдается. |
|||||
|
|
Что являться результатом поразрядных операций над знаковыми целыми? (ISO 6.3) |
|||||
|
|
Операции сдвига сохраняют знак. Другие операции действуют, как будто операнд |
|||||
|
|
(операнды) является беззнаковым целым. |
|
|
|
||
|
|
Каков знак остатка при в делении целых? (ISO 6.3.5) |
|
||||
|
+ |
|
|
|
|
|
|
|
|
Что является результатом сдвига вправо отрицательного значения целого типа со |
|||||
|
|
знаком? (ISO 6.3.7) |
|
|
|
|
|
|
|
Знак сохраняется. |
by |
|
|
|
|
A.8. |
С плавающей точкой |
|
|
|
|
||
|
|
|
|
|
|||
|
|
Определяемое реализацией |
поведение для |
|
величин с плавающей точкой |
||
|
|
longTranslateddouble |
|
64 |
2.22507385e–308 ... 1.79769313e+308 |
||
|
|
описывается в секции G3.6 стандарта ANSI Си. |
|
|
|
||
|
|
Будет ли масштабированная величина константы с плавающей точкой, которая |
|||||
|
|
находится в диапазоне представимых значений для своего типа, ближайшим |
|||||
|
|
представимым значением, или большим представимым значением, |
|||||
|
|
непосредственно смежным с ближайшим, или меньшим представимым значением, |
|||||
|
|
непосредственно смежным с ближайшим представимым значением? (ISO 6.1.3.1) |
|||||
|
|
Будет ближайшим представимым значением. |
|
|
|
||
|
|
Следующая таблица описывает объем памяти и диапазоны различных типов с |
|||||
|
|
плавающей точкой: (ISO 6.1.2.5) |
|
|
|
|
|
|
|
ТАБЛИЦА A-3. ТИПЫ С ПЛАВАЮЩЕЙ ТОЧКОЙ |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
Описание |
|
Размер (биты) |
|
|
Диапазон |
|
|
|
|
|
|
||
|
|
float |
|
32 |
1.175494e–38 ... 3.4028234e+38 |
||
|
|
double (1) |
|
32 |
1.175494e–38 ... 3.4028234e+38 |
||
|
|
|
|
|
|
|
|
Примечание 1. Если используется опция -fno-short-double, то double эквивалентен long double.
Какое будет направление усечения, когда целое число преобразуется в число с плавающей точкой, которое не может точно представить оригинальную величину? (ISO 6.2.1.3)
Вниз.
Какое будет направление усечения или округления, когда число с плавающей точкой преобразуется в число с плавающей точкой меньшего диапазона? (ISO 6.2.1.4)
Вниз.
DS51284H(ru) стр. A-4 |
© 2008 Microchip Technology Inc. |