- •Глава 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. Битовые поля
Приложение A Определяемое реализацией поведение
A.9.
A.10.
A.11.
Массивы и указатели
Определяемое реализацией поведение для массивов и указателей описывается в секции G3.7 стандарта ANSI Си.
Какой тип целого требуется для хранения максимального размера массива, или какой будет тип оператора определения типа размера, size_t? (ISO 6.3.3.4, ISO 7.1.1)
unsigned int.
Какой необходим размер целого для преобразования указателя в интегральный тип?
(ISO 6.3.4) |
. |
16 битов. |
|
|
|
Что является результатом приведения указателя к целому или наоборот? (ISO 6.3.4) |
|
Отображение тождественно. |
A |
|
Какой тип целого требуется для хранения разницы между двумя указателями на |
|
элементы одного и того же самого массива, ptrdiff_t? (ISO 6.3.6, ISO 7.1.1) |
|
unsigned int. |
Wilson |
|
Регистры
Определяемое реализацией поведение для регистров описывается в секции G3.8 стандарта ANSI Си.
В какой степени спецификатор класса памяти register действительно влияет на хранение объектов в регистрах? (ISO 6.5.1)
Если оптимизация запрещена,by будет сделана попытка выполнить предписание класса памяти register, в противном случае он будет проигнорирован.
Структуры, союзы, перечисления и битовые поля
ОпределяемоеTranslatedреализацией поведение для структур, союзов, перечислений и битовых полей описывается в секциях A6.3.9 и G3.9 стандарта ANSI Си.
Что будет результатом, если к объекту типа члена союза осуществляется доступ с использованием элемента другого типа? (ISO 6.3.2.3)
Никаких преобразований не производится.
Опишите заполнение и выравнивание для членов структур? (ISO 6.5.2.1)
Символы выровнены на байт. Все другие объекты выровнены на слово.
Какой тип является эквивалентом простого int битового поля? (ISO 6.5.2.1)
Определяется пользователем. По умолчанию — signed int битовое поле. При помощи опции командной строки может быть установлено unsigned int битовое поле.
Какой порядок расположения полей битов в пределах int? (ISO 6.5.2.1)
Биты расположены от младшего к старшему.
Может ли битовое поле простираться за границу ячейки памяти? (ISO 6.5.2.1).
Да.
Какой целый тип выбран для представления величин типа перечисления? (ISO 6.5.2.2)
int.
A.12. Квалификаторы
Определяемое реализацией поведение для квалификаторов описывается в секции G3.10 стандарта ANSI Си.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. A-5 |
16-битовый компилятор Си. Руководство
Опишите, какое действие производится при доступе к объекту, тип которого имеет квалификатор volatile? (ISO 6.5.3)
Если объект указан в выражении, к нему будет произведен доступ.
A.13. Деклараторы
Определяемое реализацией поведение для деклараторов описывается в секции G3.11 стандарта ANSI Си.
Каково максимальное количество деклараторов, которые могут модифицировать |
|
арифметический или структурный типы, или союз? (ISO 6.5.4). |
|
Ограничений нет. |
. |
A.14. Операторы |
A |
|
Соответствует ли значение односимвольнойWilson |
константы в константном выражении, |
by |
|
Определяемое реализацией поведение для операторов описывается в секции G3.12 стандарта ANSI Си.
Какое максимальное количество значений case в операторе switch? (ISO 6.6.4.2).
Определяемое реализацией поведение для директив препроцессора описывается в секции G3.13 стандарта ANSI Си.
которое управляет условием включения, значению той же символьной константы в в наборе символов среды исполнения? (ISO 6.8.1).
Да.
Может ли определенная символьная константа иметь отрицательную величину? (ISO
Да.
6.8.1)Translated.
Какой метод используется для поиска включаемых исходных файлов? (ISO 6.8.2)
Препроцессор ищет в текущем каталоге, а затем в каталогах, указанных опциями командной строки.
Как идентифицируются заголовки и определяется их местоположение? (ISO 6.8.2)
Заголовки идентифицируются в директиве #include, «обрамляются» с двух сторон символами < и > или " и ". Местоположение определяется с использованием опций командной строки.
Поддерживаются ли «обрамленные» вышеуказанным образом имена для включаемых исходных файлов? (ISO 6.8.2).
Да.
Каково соответствие между символьными последовательностями с разделителями и именами внешних исходных файлов? (ISO 6.8.2)
Они тождественны.
Опишите поведение каждой распознаваемой директивы #pragma. (ISO 6.8.6)
ТАБЛИЦА A-4. ПОВЕДЕНИЕ #PRAGMA
|
Pragma |
Поведение |
|
|
|
|
#pragma code section-name |
Именует секцию кода. |
|
#pragma code |
Возвращает секции кода ее имя по умолчанию (т.е. |
|
.text). |
|
|
|
|
|
|
|
|
#pragma idata section-name |
Именует секцию инициализируемых данных. |
|
|
|
|
#pragma idata |
Возвращает секции инициализируемых данных ее |
|
имя по умолчанию (т.е. .data). |
|
|
|
|
|
|
|
|
|
|
|
|
|
DS51284H(ru) стр. A-6 |
© 2008 Microchip Technology Inc. |
Приложение A Определяемое реализацией поведение
ТАБЛИЦА A-4. (ПРОД-Е) ПОВЕДЕНИЕ #PRAGMA
|
Pragma |
|
|
Поведение |
|
|
|
|
|
|
#pragma udata section-name |
|
Именует секцию неинициализируемых данных. |
|
|
#pragma udata |
|
Возвращает секции неинициализируемых данных |
|
|
|
ее имя по умолчанию (т.е. .bss). |
||
|
|
|
||
|
|
|
|
|
|
#pragma interrupt |
|
Определяет имя функции как функцию прерывания. |
|
|
function-name |
|
||
|
|
|
|
|
|
|
|
||
Какие будут определения для __DATE__ и __TIME__ соответственно, когда дата и |
||||
время трансляции недоступны? (ISO 6.8.8) |
. |
|||
|
||||
Не применимо. Компилятор не |
поддерживается в средах, где эти функции |
|||
недоступны. |
|
|
A |
|
|
|
|
Определяемое реализацией поведение для библиотечных функций описывается в секции G3.14 стандарта ANSI Си.
Что такое null константа указателя, в которую расширяется макро NULL? (ISO 7.1.5)
0.
Как распознается диагностика, напечатанная функцией оповещения, и как себя ведет эта функция при завершении? (ISO 7.2)
Функция оповещения печатает имя файла, номер строки и тестовое сообщение, |
|
разделяемые символом двоеточияWilson(':'). Затем она вызывает функцию аварийного |
|
завершения. |
by |
|
Какие символы проверяются с помощью функций isalnum, isalpha, iscntrl, islower, isprint и isupper? (ISO 7.3.1)
КакиеTranslatedвеличины возвращаются математическими функциями после ошибок области определения? (ISO 7.5.1)
ТАБЛИЦА A-5. СИМВОЛЫ, ПРОВЕРЯЕМЫЕ ФУНКЦИЯМИ is
Функция |
Проверяемые символы |
|
|
|
|
isalnum |
Буква либо цифра: isalpha или isdigit |
|
isalpha |
Одна из букв: islower или isupper. |
|
|
|
|
iscntrl |
Один из пяти стандартных символов управления перемещением, |
|
забой и сигнал: \f, \n, \r, \t, \v, \b, \a |
||
|
||
|
|
|
islower |
Одна из букв от ‘a’ до ‘z’ |
|
|
|
|
isprint |
Один из печатных символов или пробел: isalnum или ispunct |
|
или space |
||
|
||
|
|
|
isupper |
Одна из букв от ‘A’ до ‘Z’ |
|
|
|
|
ispunct |
Один из символов: ! “ # % & ‘ ( ) ; < = > ? [ \ ] * + , - . / : ^ |
Не число (NaN).
Устанавливают ли математические функции целое выражение errno в величину макро ERANGE при ошибках потери значимости диапазона? (ISO 7.5.1).
Да.
Получите ли вы ошибку области определения или будет возвращаться нуль, когда функция fmod имеет в качестве второго аргумента нуль? (ISO 7.5.6.4)
Ошибку области определения.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. A-7 |
16-битовый компилятор Си. Руководство
A.17. Сигналы
Что такое набор сигналов для сигнальных функций? (ISO 7.7.1.1)
ТАБЛИЦА A-6. СИГНАЛЬНЫЕ ФУНКЦИИ
Название |
Описание |
|
|
SIGABКT |
Аварийное завершение |
SIGINT |
Прием интерактивного сигнала предупреждения |
|
|
SIGILL |
Определение неверного отображения функции (function image) |
|
|
SIGFPE |
Ошибочная арифметическая операция |
|
|
SIGSEGV |
Неправильный доступ к памяти |
|
|
|
A |
SIGTERM |
Программе послан запрос на.завершение |
Опишите параметры и использование каждого сигнала, распознаваемого сигнальной функцией. (ISO 7.7.1.1)Wilson.
Определяется приложением.
Опишите обработку по умолчанию и обработку при запуске программы для каждого сигнала, распознаваемого сигнальной функцией? (ISO 7.7.1.1)
Отсутствует.
Если эквивалент сигнала (sig,SIG DFL), не выполняется до вызова обработчика сигнала, какая блокировка сигнала выполняется? (ISO 7.7.1.1)
Никакой.
|
by |
Восстанавливается ли обработка по умолчанию, если сигнал SIGILL был получен |
|
обработчиком, определенным для сигнальной функции? (ISO 7.7.1.1) |
|
Нет. |
|
A.18. Потоки и файлы |
|
Translated |
|
Требует ли последняя строка текстового потока завершающего символа новой строки? (ISO 7.9.2)
Нет.
Будут ли символы пробелов, выданные в выходной текстовый поток непосредственно перед символом новой строки, появляться при чтении этого потока? (ISO 7.9.2)
Да.
Сколько символов null может быть добавлено в данные, записанные в двоичный поток? (ISO 7.9.2)
Нисколько.
На начало или на конец файла первоначально установлен файловый указатель позиции потока в режиме добавления? (ISO 7.9.3)
На начало.
Может ли запись в текстовый поток стать причиной того, что связанный текстовый файл будет оборван за этой точкой? (ISO 7.9.3)
Определяется приложением.
Опишите характеристики буферизации файлов. (ISO 7.9.3)
Полная буферизация.
Может ли действительно существовать файл нулевой длины? (ISO 7.9.3)
Да.
Каковы правила формирования допустимого файлового имени? (ISO 7.9.3)
Определяется приложением.
DS51284H(ru) стр. A-8 |
© 2008 Microchip Technology Inc. |