- •Глава 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®
Приложение B. Встроенные функции
B.1. |
Введение |
|
|
|
В этом приложении описываются встроенные функции, специфические для |
||
|
компилятора MPLAB Cи для PIC24 и dsPIC® (бывшего MPLAB C30). |
||
|
Встроенные функции дают программисту на Cи доступ к операторам ассемблера |
||
|
или машинным командам, которые на настоящее время доступны только |
||
|
средствами inline ассемблера, но достаточно |
A |
. |
|
полезно было бы применить их в |
||
|
|
|
|
|
широком диапазоне приложений. Встроенные функции кодируются в исходных |
||
|
файлах Cи аналогично синтаксису вызова функций, но компилируются в |
||
|
ассемблерный код, который непосредственно реализует действие и не включает |
||
|
вызовы функций или библиотечных программ. |
|
|
|
Есть ряд причин, почему программисты отдают предпочтение встроенным функциям |
||
|
перед использованием inline ассемблера. Вот они: |
||
|
1. Предоставление встроенных функций для специфических целей упрощает |
||
|
кодирование. |
|
|
|
2. При использовании inline ассемблера запрещаются отдельные оптимизации. |
||
|
Для встроенных функций этоWilsonне так. |
|
|
|
3. Для машинных команд, которые используют строго определенные регистры, |
||
|
попытки избежать ошибок распределения регистров в процессе inline |
||
|
кодирования требуют значительной аккуратности. Встроенные функции делают |
||
|
by |
|
|
|
этот процесс проще, так как вам не надо беспокоиться о требованиях к |
||
|
регистрам каждой конкретной машинной команды. |
Эта глава организована следующим образом: Список встроенных функций
__builtin |
addab |
__builtin_movsac |
__builtin_tbloffset |
__builtin |
add |
__builtin_mpy |
__builtin_tblrdh |
__builtin |
btg |
__builtin_mpyn |
__builtin_tblrdl |
__builtin |
clr |
__builtin_msc |
__builtin_tblwth |
__builtin |
clr prefetch |
__builtin_mulss |
__builtin_tblwtl |
__builtin |
divf |
__builtin_mulsu |
__builtin_write_NVM |
__builtin |
divmodsd |
__builtin_mulus |
__builtin_write_OSCCONL |
__builtin |
divmodud |
__builtin_muluu |
__builtin_write_OSCCONH |
__Translatedbuiltin divsd |
__builtin_nop |
__builtin_write_RTCWEN |
|
__builtin_divud |
__builtin_psvpage |
|
|
__builtin_dmaoffset |
__builtin_psvoffset |
|
|
__builtin_ed |
__builtin_readsfr |
|
|
__builtin_edac |
__builtin_return_address |
|
|
__builtin_fbcl |
__builtin_sac |
|
|
__builtin_lac |
__builtin_sacr |
|
|
__builtin_mac |
__builtin_sftac |
|
|
__builtin_modsd |
__builtin_subab |
|
|
__builtin_modud |
__builtin_tblpage |
|
|
|
|
|
|
|
|
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-1 |
16-битовый компилятор Си. Руководство
B.2. Список встроенных функций
Данная секция описывает интерфейс программиста со встроенными функциями компилятора. Поскольку функции «встроены», отсутствуют связанные с ними файлы заголовков. Аналогично, нет опций командной строки, связанных со встроенными функциями, — они всегда доступны. Имена встроенных функций выбраны так, чтобы они принадлежали к пространству имен компилятора (они все имеют префикс __builtin_), поэтому они не будут конфликтовать с именами функций и переменных в пространстве имен программиста.
__builtin_addab
Описание: |
Складывает аккумуляторы A и B, и результат помещает в |
||
|
|
A |
|
|
заданный аккумулятор. Например:. |
||
|
register int result asm(“A”); |
||
|
result=__builtin_addab(); |
||
|
|
Wilson |
|
|
будет генерировать: |
||
|
add A |
||
Прототип: |
int __builtin addab(void); |
||
Аргумент: |
Нет |
|
|
Возвращаемое значение: |
Результат сложения в аккумуляторе. |
||
Операторы ассемблера / |
add |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Сообщение об ошибке будет выдано, если результат — не |
||
|
регистр аккумулятор. |
||
|
|
|
|
__builtin_add |
by |
|
|
|
|
||
|
|
||
Описание: |
Сдвигает value на shift битов (литерал в диапазоне от –8 до |
||
Translated |
7) и прибавляет 16-битовый результат сдвига к старшему слову |
||
аккумулятора result. Например: |
|||
|
|||
|
register int result asm(“A”); |
||
|
int value; |
||
|
result = __builtin_add(value,0); |
||
|
Если value содержится в w0, будет сгенерирована команда: |
||
|
add w0, #0, A |
||
Прототип: |
int __builtin_add(int value, const int shift); |
||
Аргумент: |
value — целое число, добавляемое к аккумулятору |
||
|
shift — константа величины сдвига (отрицательная — |
||
|
арифметический сдвиг влево, положительная — |
||
|
арифметический сдвиг вправо) |
Возвращаемое значение: |
Результат сложения со сдвинутой величиной в аккумуляторе |
Операторы ассемблера / |
add |
машинные команды: |
|
Сообщения об ошибках |
Сообщение об ошибке будет выдано, если: |
|
• результат — не регистр аккумулятор |
|
• литерал сдвига вне диапазона |
DS51284H(ru) стр. B-2 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_btg
Описание: |
Генерирует машинную команду инверсии бита btg. Например: |
||
|
int i; /* по умолчанию near */ |
||
|
int l __attribute__((far)); |
||
|
struct foo { |
|
|
|
|
int bit1:1; |
|
|
} barbits; |
|
|
|
int bar; |
|
|
|
void some_bittoggles() { |
||
|
|
register int j asm("w9"); |
|
|
|
int k; |
. |
|
|
A |
|
|
|
k = i; |
|
|
|
|
|
|
|
__builtin btg(&i,1); |
|
|
|
__builtin btg(&j,3); |
|
|
|
__builtin btg(&k,4); |
|
|
|
__builtin btg(&l,11); |
|
|
|
return j+k; |
|
|
} |
|
|
|
Заметьте, что передача адреса переменной в регистре вызовет |
||
|
предупреждение от компилятора и приведет к сохранению |
||
|
регистра в стеке (так, что его адрес может быть получен); эта |
||
|
форма не рекомендована. Это предупреждение относится |
||
|
|
Wilson |
|
|
только к переменным, явно размещенным программистом в |
||
|
регистрах. |
|
|
Прототип: |
void __builtin_btg(unsigned int *p, |
||
|
by |
unsigned int 0xn); |
|
Аргумент: |
|
||
p |
— указатель на данные, в которых инвертируется бит |
||
|
0xn — литерал в диапазоне от 0 до 0xF |
||
Возвращаемое значение: Нет |
|
||
Операторы ассемблера / |
btg |
|
|
машинные команды: |
|
|
|
Translated |
|
|
|
Сообщения об ошибках Сообщение об ошибке будет выдано, если значения параметров
|
вне диапазона |
|
|
builtin |
clr |
|
|
Описание: |
Очищает указанный аккумулятор, например: |
|
register int result asm("A"); |
|
result = __builtin_clr(); |
|
будет сгенерирована команда: |
|
clr A |
Прототип: |
int __builtin_clr(void); |
Аргумент: |
Нет. |
Возвращаемое значение: Возвращает сброшенный в 0 аккумулятор
Операторы ассемблера / clr
машинные команды:
Сообщения об ошибках Сообщение об ошибке будет выдано, если результат — не аккумулятор.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-3 |
16-битовый компилятор Си. Руководство
__builtin_clr_prefetch
Описание:
Аргумент:
Прототип:Translated
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Очищает аккумулятор и производит предварительную выборку данных для последующей MAC команды.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и xval игнорируются, но должны присутствовать.
yptr может быть null, чтобы показать, что предварительная выборка Y не производится, в этом случае величины yincr и yval игнорируются, но должны присутствовать.
xval и yval представляют адрес переменной Cи, куда |
|
загружается предварительно выбранная величина. |
|
|
. |
xincr и yincr могут быть литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
целым значением. |
A |
Например:
Если AWBWilsonне null, содержимое другого аккумулятора будет округлено и записано в указанную им переменную.
register int |
result asm("A"); |
|
int x |
memory |
buffer[256] |
__attribute |
((space(xmemory))); |
|
int y |
memory |
buffer[256] |
__attr bute |
((space(ymemory))); |
int *xmemory; int *ymemory; int awb;
int xVal, |
yVal; |
|
xmemory |
= |
x_memory_buffer; |
ymemory |
= |
y_memory_buffer; |
result = __builtin_clr_prefetch(&xmemory, &xVal, |
|
by |
2, &ymemory, &yVal, 2, &awb); |
Может сгенерировать:
clr A, [w8]+=2, w4, [w10]+=2, w5, w13
Компилятору, возможно, потребуется освобождение w13, чтобы удостовериться, что он доступен для записи. Это может быть рекомендовано пользователям, которые запрашивают для этих целей регистр.
После этой команды:
•result будет очищен
•xVal будет содержать x_memory_buffer[0]
•yVal будет содержать y_memory_buffer[0]
•xmemory и ymemory будут увеличены на 2 и готовы для следующей команды MAC.
int __builtin_clr_prefetch(
int **xptr, int *xval, int xincr,
int **yptr, int *yval, int yincr, int *AWB);
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предвар. выбранного x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращения адреса предвар. выбранного y AWB — указатель для сохранения альтернативного аккумул. Возвращает сброшенный в 0 аккумулятор
clr
Сообщение об ошибке будет выдано, если:
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
DS51284H(ru) стр. B-4 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_divf
Описание: |
Вычисляет частное от деления num на den. Если den нулевой, |
|||
|
происходит математическая ошибка. Аргументы функции — без |
|||
|
знака, как и результат. |
|
|
|
Прототип: |
unsigned int __builtin_divf(unsigned int num, |
|||
|
unsigned int den); |
|
||
Аргумент: |
num — делимое |
|
|
|
|
den — делитель |
|
. |
|
Возвращаемое значение: |
|
|
|
|
Частное от деления делимого на делитель (1) |
||||
Операторы ассемблера / |
divf |
|
A |
|
машинные команды: |
|
|
|
|
Сообщения об ошибках |
Нет. |
Wilson |
|
Прим.перев. 1: В соответствии с документацией Microchip, например «dsPIC30F/33F Programmer’s Reference Manual» (DS70157C) p.5-105, команда divf используется для дробного деления со знаком, т.е. результат=делимое/делитель, где делитель должен быть больше делимого, в противном случае устанавливается бит OV и результат деления недействителен (функция этого никак не отслеживает). Команда выполняется в цикле 17 раз, т.е. встроенная функция расширяется в последовательность команд, одна из которых организует цикл. Кроме частного, в результате выполнения команды доступен также остаток, но функция его не возвращает. Причина этих неточностей в описании функции непонятна, тем более что исходный документ имеет номер коррекции «h» и копирайт 2008 года...
|
|
|
|
by |
|
Описание: |
Выполняет поддержку присущего 16-битовой архитектуре |
|
|
знакового деления с ограничениями, приведенными в |
|
|
«dsPIC30F/33F Programmer’s Reference Manual» (DS70157C). |
|
|
Основное ограничение в том, что, если частное не помещается |
|
Translated |
в 16-бит, результаты, включая остаток, непредсказуемы. Эта |
|
форма встроенной функции позволяет получить как частное, так |
||
|
||
|
и остаток. |
|
Прототип: |
signed int __builtin_divmodsd( |
|
|
signed long dividend, signed int divisor, |
|
|
signed int *remainder); |
|
Аргумент: |
dividend — делимое |
|
|
divisor — делитель |
|
|
remainder — указатель на остаток |
|
Возвращаемое значение: Частное и остаток. |
||
Операторы ассемблера / |
divmodsd |
|
машинные команды: |
|
|
Сообщения об ошибках |
Нет |
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-5 |
16-битовый компилятор Си. Руководство
__builtin_divmodud
Описание: |
Выполняет поддержку присущего 16-битовой архитектуре |
||
|
беззнакового деления с ограничениями, приведенными в |
||
|
«dsPIC30F/33F Programmer’s Reference Manual» (DS70157C). |
||
|
Основное ограничение в том, что, если частное не помещается |
||
|
в 16-бит, результаты, включая остаток, непредсказуемы. Эта |
||
|
форма встроенной функции позволяет получить как частное, так |
||
|
и остаток. |
. |
|
Прототип: |
|
|
|
unsigned int __builtin_divmodsd( |
|||
|
unsigned long dividend, unsigned int divisor, |
||
|
|
|
A |
|
unsigned int *remainder); |
||
Аргумент: |
dividend — делимое |
|
|
|
divisor — делитель |
|
|
|
|
Wilson |
|
|
remainder — указатель на остаток |
||
Возвращаемое значение: Частное и остаток. |
|
||
Операторы ассемблера / |
divmodud |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет |
|
|
|
|
|
|
__builtin_divsd |
|
|
|
|
|
||
Описание: |
Вычисляет частное от num/den. Если den равен нулю, |
||
|
произойдет математическая ошибка. Аргументы функции имеют |
||
|
знак, как и результат. Опция командной строки -Wconversion |
||
|
может быть использована для обнаружения неправильного |
||
|
преобразования знака. |
|
|
Прототип: |
intby |
__builtin_divsd(const long num, |
|
Translated |
|
|
const int den); |
|
|
|
|
Аргумент: |
num — делимое |
|
|
|
den — делитель |
|
|
Возвращаемое значение: Частное (знаковое целое) от деления num/den. |
|||
Операторы ассемблера / |
div.sd |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
|
|
|
builtin divud |
|
|
|
|
|
||
Описание: |
Вычисляет частное от num/den. Если den равен нулю, |
||
|
произойдет математическая ошибка. Аргументы функции без |
||
|
знака, как и результат. Опция командной строки -Wconversion |
||
|
может быть использована для обнаружения неправильного |
||
|
преобразования знака. |
|
|
Прототип: |
int __builtin_divsd(const long num, |
||
|
|
|
const int den); |
Аргумент: |
num — делимое |
|
|
|
den — делитель |
|
|
Возвращаемое значение: Частное (целое без знака) от деления num/den. |
|||
Операторы ассемблера / |
div.ud |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
DS51284H(ru) стр. B-6 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_dmaoffset
Описание: |
Получает смещение символа в пределах DMA памяти. |
||
|
Например: |
|
|
|
unsigned int result; |
||
|
char buffer[256] __attribute__((space(dma))); |
||
|
result = __builtin_dmaoffset(&buffer); |
||
|
Может создать: |
|
|
|
mov #dmaoffset(buffer), w0 |
||
Прототип: |
unsigned int __builtin_dmaoffset(const void *p); |
||
|
|
|
. |
Аргумент: |
*p — указатель на адрес DMA памяти. |
||
|
|
A |
|
Возвращаемое значение: Смещение до переменной в DMA памяти. |
|||
Операторы ассемблера / |
dmaoffset |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках Сообщение об ошибке будет выдано, если параметр не |
|||
|
является адресом глобального символа. |
||
|
|
|
|
__builtin_ed |
|
|
|
|
|
||
Описание: |
Возвращает квадрат distance в качестве результата. Также |
||
|
производит предварительную выборку данных для следующей |
||
|
Wilson |
|
|
|
операции возведения в квадрат, вычисляя разницу |
||
|
**xptr–**yptr и сохраняя ее в *distance. |
||
|
xincr и yincr могут быть литералами: -6, -4, -2, 0, 2, 4, 6 или |
||
|
целыми величинами. Например: |
||
|
register int result asm("A"); |
||
|
by |
|
|
|
int *xmemory, *ymemory; |
||
|
int distance; |
|
|
|
result = __builtin_ed(distance, |
||
|
|
|
&xmemory, 2, |
|
|
|
&ymemory, 2, |
|
|
|
&distance); |
|
Может создать: |
|
|
|
ed w4*w4, A, [w8]+=2, [W10]+=2, w4 |
||
Прототип: |
int __builtin_ed(int sqr, int **xptr, int xincr, |
||
|
int **yptr, int yincr, int *distance); |
||
Аргумент: |
sqr — возводимое в квадрат целое |
||
Translated |
xptr — целый указатель на адрес предварительной выборки x |
||
xincr — целое приращение адреса предварительной выборки x |
|||
yptr — целый указатель на адрес предварительной выборки y |
|||
|
|
|
yincr — целое приращение адреса предварительной выборки y distance — целый указатель разницы (дистанции)
Возвращаемое значение: Результат возведения в квадрат в аккумуляторе.
Операторы ассемблера / ed
машинные команды:
Сообщения об ошибках Сообщение об ошибке будет выдано, если
•результат не является аккумулятором
•xptr — null
•yptr — null
•distance — null
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-7 |
16-битовый компилятор Си. Руководство
__builtin_edac
Описание: |
Добавляет квадрат distance к заданному аккумулятору и |
|
|
возвращает его в качестве результата. Также производит |
|
|
предварительную выборку данных для следующей операции |
|
|
возведения в квадрат, вычисляя разницу |
|
|
**xptr–**yptr и сохраняя ее в *distance. |
|
|
xincr и yincr могут быть литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
|
целыми величинами. Например: |
|
|
|
. |
|
register int result asm("A"); |
|
|
int *xmemory, *ymemory; |
|
|
int distance; |
|
|
result = __builtinA |
_edac(distance, |
|
Wilson |
&xmemory, 2, |
|
|
|
|
|
&ymemory, 2, |
|
|
&distance); |
|
Может создать: |
|
|
edac w4*w4, A, [w8]+=2, [W10]+=2, w4 |
|
Прототип: |
int __bui tin edac(int sqr, int **xptr, int xincr, |
|
|
int **yptr, int yincr, int *distance); |
|
Аргумент: |
sqr — возводимое в квадрат целое |
|
|
xptr — целый указатель на адрес предварительной выборки x |
|
|
xincr — целое приращение адреса предварительной выборки x |
|
|
by |
|
|
ptr — целый указатель на адрес предварительной выборки y |
|
|
incr — целое приращение адреса предварительной выборки y |
|
|
distance — целый указатель разницы (дистанции) |
|
Возвращаемое значение: Накопленная сумма квадратов в аккумуляторе. |
||
Translated |
edac |
|
Операторы ассемблера / |
|
|
машинные команды: |
|
|
Сообщения об ошибках Сообщение об ошибке будет выдано, если |
||
|
• результат не является аккумулятором |
|
|
• xptr — null |
|
|
• yptr — null |
|
|
• distance — null |
|
builtin fbcl |
|
|
|
|
|
Описание: |
Находит первый, отличный от левого, бит. Это полезно для |
|
|
динамического масштабирования данных с фиксированной |
|
|
точкой. Например: |
|
|
int result, value; |
|
|
result = __builtin_fbcl(value); |
|
|
Может создать: |
|
|
fbcl w4, w5 |
|
Прототип: |
int __builtin_fbcl(int value); |
|
Аргумент: |
value — число, в котором ищется первый, отличный от левого, |
|
|
бит. |
|
Возвращаемое значение: Номер бита, считая от 0, в направлении слева направо, начиная
|
со следующего за знаковым. |
Операторы ассемблера / |
fbcl |
машинные команды: |
|
Сообщения об ошибках |
Нет. |
DS51284H(ru) стр. B-8 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_lac
Описание:
Прототип:
Аргумент:
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Translated
Сдвиг значения на shift (литерал, от –8 до 7) и возврат сдвинутой величины в аккумуляторе.
Например:
register int result asm("A"); int value;
result = __builtin_lac(value,3);
Может сгенерировать: |
. |
|
|
lac w4, #3, A |
A |
|
int __builtin_lac(int value, int shift);
value — сдвигаемо целое число
shift — константа величины сдвига (отрицательная — Wilson
арифметический сдвиг влево, положительная — арифметический сдвиг вправо)
Результат сдвига в аккумуляторе. lac
Сообщение об ошибке будет выдано, если:
• результат — не регистр аккумулятор
• литерал сдвига вне диапазона by
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-9 |
16-битовый компилятор Си. Руководство
__builtin_mac
Описание:
Прототип:
Аргумент:Translated
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Вычисляет произведение a*b и суммирует его с аккумулятором, кроме того делает предварительную выборку данных для следующей операции MAC.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и
xval игнорируются, но должны присутствовать. |
|
|
yptr может быть null, чтобы показать, что предварительная |
|
|
|
. |
и |
выборка Y не производится, в этом случае величины yincr |
||
yval игнорируются, но должны присутствовать. |
|
|
xval и yval представляют адрес переменной Cи, куда |
|
|
загружается предварительно выбранная величина. |
|
|
xincr и yincr могут бытьA |
литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
Wilson |
|
|
целым значением. |
|
|
Если AWB не null, содержимое другого аккумулятора будет |
|
|
округлено и записано в указанную им переменную. |
|
|
Например: |
|
|
register int result asm("A"); |
|
|
int *xmemory; |
|
|
int *ymemory; |
|
|
int xVal, yVal; |
|
|
result = builtin_mac(xVal, yVal, |
|
|
by |
&xmemory, &xVal, 2, |
|
|
|
&ymemory, &yVal, 2, 0);
Может создать: |
|
mac w4*w5, A, [w8]+=2, w4, |
[w10]+=2, w5 |
int __builtin_mac(int a, int |
b, |
int **xptr, int *xval, int |
xincr, |
int **yptr, int *yval, int |
yincr, int *AWB); |
a — целый сомножитель. b — целый сомножитель.
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предварительной выборки x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращение адреса предварительной выборки y AWB — указатель целой переменной для сохранения там
альтернативного аккумулятора. Накопленный результат в аккумуляторе.
mac
Сообщение об ошибке будет выдано, если
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
DS51284H(ru) стр. B-10 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_modsd
Описание: |
Выполняет поддержку присущего 16-битовой архитектуре |
||
|
знакового деления с ограничениями, приведенными в |
||
|
«dsPIC30F/33F Programmer’s Reference Manual» (DS70157C). |
||
|
Основное ограничение в том, что, если частное не помещается |
||
|
в 16-бит, результаты, включая остаток, непредсказуемы. Эта |
||
|
форма встроенной функции позволяет получить только остаток. |
||
Прототип: |
signed int __builtin_modsd(signed long dividend, |
||
|
signed inr divisor); |
||
Аргумент: |
dividend — делимое |
A |
|
|
divisor — делитель |
||
|
. |
||
Возвращаемое значение: Остаток. |
|
||
Операторы ассемблера / |
modsd |
Wilson |
|
|
|
||
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
|
|
|
__builtin_modud |
|
|
|
|
|
||
Описание: |
Выполняет поддержку присущего 16-битовой архитектуре |
||
|
беззнакового деления с ограничениями, приведенными в |
||
|
«dsPIC30F/33F Programmer’s Reference Manual» (DS70157C). |
||
|
Основное ограничение в том, что, если частное не помещается |
||
|
в 16-бит, результаты, включая остаток, непредсказуемы. Эта |
||
|
форма встроенной функции позволяет получить только остаток. |
||
Прототип: |
unsigned int __builtin_modud( |
||
|
unsigned long dividend, |
||
Translated |
byunsigned inr divisor); |
||
Аргумент: |
dividend — делимое |
|
|
|
divisor — делитель |
|
|
Возвращаемое значение: Остаток. |
|
||
Операторы ассемблера / |
modud |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-11 |
16-битовый компилятор Си. Руководство
__builtin_movsac
Описание:
Прототип:
Аргумент:Translated
Возвращаемое значение:
Операторы ассемблера / машинные команды: Сообщения об ошибках
Делает предварительную выборку данных для следующей операции MAC.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и xval игнорируются, но должны присутствовать.
yptr может быть null, чтобы показать, что предварительная выборка Y не производится, в этом случае величины yincr и
yval игнорируются, но должны. присутствовать.
xval и yval представляют адрес переменной Cи, куда
загружается предварительно выбранная величина.
xincr и yincr могут быть литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
целым значением. |
A |
Wilson |
|
Если AWB не null, содержимое другого аккумулятора будет округлено и записано в указанную им переменную. Например:
register int result asm("A"); int *xmemory;
int *ymemory; int xVa , yVal;
result = builtin_movsac(&xmemory, &xVal, 2, &ymemory, &yVal, 2, 0);
Может создать:
movsac A, [w8]+=2, w4, [w10]+=2, w5 int __builtin_movsac(
by
int **xptr, int *xval, int xincr,
int **yptr, int *yval, int yincr, int *AWB);
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предварительной выборки x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращение адреса предварительной выборки y AWB — указатель целой переменной для сохранения там
альтернативного аккумулятора.
Аккумулятор никак не меняется, но указан должен быть обязательно, чтобы команда могла выбрать альтернативный аккумулятор для сохранения в AWB
movsac
Сообщение об ошибке будет выдано, если:
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
DS51284H(ru) стр. B-12 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_mpy
Описание:
Прототип:
Аргумент: ВозвращаемоеTranslatedзначение: Операторы ассемблера /
машинные команды: Сообщения об ошибках
Вычисляет произведение a*b, кроме того делает предварительную выборку данных для следующей операции MAC.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и xval игнорируются, но должны присутствовать.
yptr может быть null, чтобы показать, что предварительная выборка Y не производится, в этом случае величины yincr и
yval игнорируются, но должны присутствовать. |
|
xval и yval представляют адрес переменной Cи, куда |
|
|
. |
загружается предварительно выбранная величина. |
|
xincr и yincr могут бытьA |
литералами: -6, -4, -2, 0, 2, 4, 6 или |
целым значением. |
|
Например: |
|
register int result asm("A"); |
|
int *xmem ry; |
|
int *ymemory; |
|
int xVa , yVal; |
|
result = builtin_mpy(xVal, yVal, |
|
|
&xmemory, &xVal, 2, |
|
&ymemory, &yVal, 2); |
Может создать: |
|
Wilson |
|
mpy w4*w5, A, [w8]+=2, w4, [w10]+=2, w5 |
|
by |
|
int __builtin_mac(int a, int b, |
int **xptr, int *xval, int xincr, int **yptr, int *yval, int yincr);
a — целый сомножитель. b — целый сомножитель.
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предварительной выборки x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращение адреса предварительной выборки y Произведение в аккумуляторе.
mpy
Сообщение об ошибке будет выдано, если
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-13 |
16-битовый компилятор Си. Руководство
__builtin_mpyn
Описание:
Прототип:
Аргумент:Translated
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Вычисляет произведение –a*b, кроме того делает предварительную выборку данных для следующей операции MAC.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и
xval игнорируются, но должны присутствовать. |
|
|
yptr может быть null, чтобы показать, что предварительная |
|
|
|
. |
и |
выборка Y не производится, в этом случае величины yincr |
||
yval игнорируются, но должны присутствовать. |
|
|
xval и yval представляют адрес переменной Cи, куда |
|
|
загружается предварительно выбранная величина. |
|
|
xincr и yincr могут бытьA |
литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
Wilson |
|
|
целым значением. |
|
|
Например: |
|
|
register int result asm("A"); |
|
|
int *xmem ry; |
|
|
int *ymemory; |
|
|
int xVa , yVal; |
|
|
result = builtin_mpyn(xVal, yVal, |
|
|
|
&xmemory, &xVal, 2, |
|
by |
&ymemory, &yVal, 2); |
|
|
|
Может создать:
mpy.n w4*w5, A, [w8]+=2, w4, [w10]+=2, w5 int __builtin_mac(int a, int b,
int **xptr, int *xval, int xincr, int **yptr, int *yval, int yincr);
a — целый сомножитель. b — целый сомножитель.
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предварительной выборки x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращение адреса предварительной выборки y Произведение в аккумуляторе.
mpy.n
Сообщение об ошибке будет выдано, если
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
DS51284H(ru) стр. B-14 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_msc
Описание:
Прототип:
Аргумент:Translated
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Вычисляет произведение a*b и вычитает его из аккумулятора, кроме того делает предварительную выборку данных для следующей операции MAC.
xptr может быть null, чтобы показать, что предварительная выборка X не производится, в этом случае величины xincr и
xval игнорируются, но должны присутствовать. |
|
|
yptr может быть null, чтобы показать, что предварительная |
|
|
|
. |
и |
выборка Y не производится, в этом случае величины yincr |
||
yval игнорируются, но должны присутствовать. |
|
|
xval и yval представляют адрес переменной Cи, куда |
|
|
загружается предварительно выбранная величина. |
|
|
xincr и yincr могут бытьA |
литералами: -6, -4, -2, 0, 2, 4, 6 или |
|
Wilson |
|
|
целым значением. |
|
|
Если AWB не null, содержимое другого аккумулятора будет |
|
|
округлено и записано в указанную им переменную. |
|
|
Например: |
|
|
register int result asm("A"); |
|
|
int *xmemory; |
|
|
int *ymemory; |
|
|
int xVal, yVal; |
|
|
result = builtin_msc(xVal, yVal, |
|
|
by |
&xmemory, &xVal, 2, |
|
|
|
&ymemory, &yVal, 2, 0);
Может создать: |
|
msc w4*w5, A, [w8]+=2, w4, |
[w10]+=2, w5 |
int __builtin_msc(int a, int |
b, |
int **xptr, int *xval, int |
xincr, |
int **yptr, int *yval, int |
yincr, int *AWB); |
a — целый сомножитель. b — целый сомножитель.
xptr — целый указатель на адрес предварительной выборки x xval — целое значение предварительно выбранного x
xincr — целое приращение адреса предварительной выборки x yptr — целый указатель на адрес предварительной выборки y yval — целое значение предварительно выбранного y
yincr — целое приращение адреса предварительной выборки y AWB — указатель целой переменной для сохранения там
альтернативного аккумулятора. Накопленный результат в аккумуляторе.
msc
Сообщение об ошибке будет выдано, если
•результат не является аккумулятором
•xval — null, а xptr — не null
•yval — null, а yptr — не null
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-15 |
16-битовый компилятор Си. Руководство
__builtin_mulss
Описание: |
Вычисляет произведение p0 * p1. Аргументы функции — целые |
||||
|
со знаком, произведение — длинное целое со знаком. Опция |
||||
|
командной строки -Wconversion может быть использована |
||||
|
для обнаружения неправильного преобразования знака. |
||||
Прототип: |
signed long __builtin_mulss(const signed int p0, |
||||
|
|
|
const signed int p1); |
||
Аргумент: |
p0 — сомножитель |
|
|
||
|
p1 — сомножитель |
|
|
||
Возвращаемое значение: Результат длинное целое со знаком. |
|||||
Операторы ассемблера / |
mul.ss |
A |
. |
||
|
|||||
машинные команды: |
|
|
|
|
|
Сообщения об ошибках |
Нет. |
|
|
||
|
|
|
|||
|
|
|
|
|
|
__builtin_mulsu |
|
|
|
|
|
|
|
||||
Описание: |
Вычисляет произведение p0 * p1. Аргументы функции — целое |
||||
|
со знаком и целое без знака, произведение — длинное целое со |
||||
|
знаком. Опция командной строки -Wconversion может быть |
||||
|
использована для обнаружения неправильного преобразования |
||||
|
знака. Эта функция поддерживает полный диапазон режимов |
||||
|
адресации, включая непосредственный операнд для аргумента |
||||
|
p1. |
|
Wilson |
|
|
|
|
|
|
|
|
Прототип: |
signed long __builtin_mulsu(const signed int p0, |
||||
|
|
|
const unsigned int p1); |
||
Аргумент: |
p0 — сомножитель |
|
|
||
|
by |
— сомножитель |
|
|
|
|
p1 |
|
|
||
Возвращаемое значение: Результат длинное целое со знаком. |
|||||
Операторы ассемблера / |
mul.su |
|
|
||
машинные команды: |
|
|
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
|
|
|
|
|
|
|
builtin mulus |
|
|
|
|
|
|
|
||||
Описание: |
Вычисляет произведение p0 * p1. Аргументы функции — целое |
||||
|
без знака и целое со знаком, произведение — длинное целое со |
||||
|
знаком. Опция командной строки -Wconversion может быть |
||||
|
использована для обнаружения неправильного преобразования |
||||
|
знака. Эта функция поддерживает полный диапазон режимов |
||||
|
адресации. |
|
|
||
Прототип: |
signed long __builtin_mulus(const unsigned int p0, |
||||
Translated |
|
|
const signed int p1); |
||
p0 — сомножитель |
|
|
|||
Аргумент: |
|
|
p1 — сомножитель Возвращаемое значение: Результат длинное целое со знаком.
Операторы ассемблера / mul.us
машинные команды: Сообщения об ошибках Нет.
DS51284H(ru) стр. B-16 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_muluu
Описание: |
Вычисляет произведение p0 * p1. Аргументы функции — целые |
|
без знака, произведение — длинное целое без знака. Опция |
|
командной строки -Wconversion может быть использована |
|
для обнаружения неправильного преобразования знака. Эта |
|
функция поддерживает полный диапазон режимов адресации, |
|
включая непосредственный операнд для аргумента p1. |
Прототип:
Аргумент:
Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
__builtin_nop
Описание:
Прототип:
Аргумент: Возвращаемое значение: Операторы ассемблера / машинные команды: Сообщения об ошибках
Описание:
Прототип:
Аргумент: Возвращаемое значение:
Операторы ассемблера / машинные команды: Сообщения об ошибках
Translatedbuiltin psvpage
unsigned long __builtin_muluu(
Генерирует команду nop.
|
const unsigned int p0, |
||
|
const unsigned |
int p1); |
|
p0 — сомножитель |
A |
. |
|
p1 — сомножитель |
|
||
|
|
|
|
Результат длинное целое без знака. |
|||
mul.uu |
|
|
|
Нет. |
Wilson |
|
|
Нет |
|
|
void __builtin nop(void);
Нетby nop
Нет.
Возвращает номер страницы psv для объекта, чей адрес задан в качестве параметра. Аргумент p должен быть адресом объекта в пространствах EEdata, PSV или программ, в противном случае будет выдано сообщение об ошибке и компиляция завершится неудачно. См. атрибут space (space) в п. 2.3.1. «Определение атрибутов переменных»
unsigned int __builtin_psvpage(const void *p);
p — адрес объекта
Номер страницы psv для объекта, чей адрес задан в качестве параметра.
psvpage
Следующее сообщение об ошибке будет выдано, если функция использована некорректно:
«Argument to __builtin_psvpage() is not the address of an object in code, psv, or eedata section».
Аргументом может быть только явный адрес объекта. Например, если obj — объект в программной секции или секции только для чтения, следующий синтаксис правомерен: unsigned page = __builtin_psvpage(&obj);
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-17 |
16-битовый компилятор Си. Руководство
__builtin_psvoffset
Описание: |
Возвращает смещение на странице psv для объекта, чей адрес |
|
|
задан в качестве параметра. Аргумент p должен быть адресом |
|
|
объекта в пространствах EEdata, PSV или программ, в |
|
|
противном случае будет выдано сообщение об ошибке и |
|
|
компиляция завершится неудачно. См. атрибут space (space) в |
|
|
п. 2.3.1. «Определение атрибутов переменных» |
|
Прототип: |
unsigned int __builtin_psvoffset(const void *p); |
|
Аргумент: |
p — адрес объекта |
|
Возвращаемое значение: Смещение на странице psv для объекта, чей адрес задан в |
||
|
качестве параметра. |
. |
|
A |
|
Операторы ассемблера / |
psvoffset |
|
машинные команды: |
|
|
|
|
|
Сообщения об ошибках |
Следующее сообщение об ошибке будет выдано, если функция |
|
|
использована некорректно: |
|
|
«Argument to builtin_psvoffset() is not the address of an |
|
|
object in code, p v, or eedata section». |
|
|
Аргументом может быть только явный адрес объекта. |
|
|
Например, если obj — объект в программной секции или |
|
|
секции только для чтения, следующий синтаксис правомерен: |
|
|
unsigned page = __builtin_psvoffset(&obj); |
|
|
Wilson |
|
__builtin_readsfr |
|
|
|
|
|
Описание: |
Читает SFR |
|
Прототип: |
unsigned int __builtin_readsfr(const void *p); |
|
Аргумент: |
by |
|
p — адрес регистра |
|
|
Возвращаемое значение: |
Содержимое SFR. |
|
Операторы ассемблера / |
readsfr |
|
машинные команды: |
|
|
Сообщения об ошибках |
Нет данных (прим. перев.) |
|
|
|
|
builtin return_address |
|
|
|
|
|
Описание: |
Возвращает адрес возврата текущей функции или одной из |
|
|
вызвавших ее функций. Значение 0 аргумента level позволяет |
|
|
получить адрес возврата текущей функции, значение 1 — адрес |
|
|
возврата функции, вызвавшей текущую, и т.д. Когда значение |
|
|
level превысит реальную глубину стека, будет возвращаться 0. |
|
|
Эта функция может использоваться с ненулевыми аргументами |
|
|
только для отладки. |
|
Прототип: |
int __builtin_return_address(const int level); |
|
Translated |
level — количество фреймов функции для просмотра стека |
|
Аргумент: |
вызовов.
Возвращаемое значение: Адрес возврата текущей функции или одной из вызвавших ее
|
функций. |
Операторы ассемблера / |
mov |
машинные команды: |
|
Сообщения об ошибках |
Нет. |
DS51284H(ru) стр. B-18 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_sac
Описание: |
Сдвигает значение в аккумуляторе, заданном параметром |
|
value, на shift (литерал в диапазоне от –8 до 7) битов и |
|
возвращает старшее слово аккумулятора в качестве |
|
результата. Например: |
|
register int value asm(“A”); |
|
int result; |
|
|
. |
|
result = __builtin_sac(value,3); |
|
|
Может создать: |
A |
|
sac A, #3, w0 |
|
|
|
|
Прототип: |
int __builtin_sac(int value, int shift); |
|
Аргумент: |
value — целое, которое будет сдвигаться, представляет собой |
|
|
Wilson |
|
|
аккумулятор. |
|
|
shift — величина сдвига (отрицательная — арифметический |
|
|
сдвиг влево, положительная — арифметический сдвиг вправо) |
Возвращаемое значение: |
Cтаршее слово аккумулятора, заданного параметром value. |
Операторы ассемблера / |
sac |
машинные команды: |
|
Сообщения об ошибках |
Сообщение об ошибке будет выдано, если: |
|
• параметр value не является аккумулятором |
|
• shift — не константа разрешенного диапазона |
__builtin_sacr
Описание: |
Сдвигает значение в аккумуляторе, заданном параметром |
||
машинныеTranslatedкоманды: |
valueby |
, на shift (литерал в диапазоне от –8 до 7) битов и |
|
возвращает округленное старшее слово аккумулятора в |
|||
|
|||
|
качестве результата. Округление производится в соответствии с |
||
|
состоянием бита CORCONbits.RND. Например: |
||
|
register int value asm(“A”); |
||
|
int result; |
||
|
result = __builtin_sacr(value,3); |
||
|
Может создать: |
||
|
sac.r A, #3, w0 |
||
Прототип: |
int __builtin_sacr(int value, int shift); |
||
Аргумент: |
value — целое, которое будет сдвигаться, представляет собой |
||
|
аккумулятор. |
||
|
shift — величина сдвига (отрицательная — арифметический |
||
|
сдвиг влево, положительная — арифметический сдвиг вправо) |
Возвращаемое значение: Cтаршее слово аккумулятора, заданного параметром value.
Операторы ассемблера / sac.r
Сообщения об ошибках Сообщение об ошибке будет выдано, если:
•параметр value не является аккумулятором
•shift — не константа разрешенного диапазона
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-19 |
16-битовый компилятор Си. Руководство
__builtin_sftac
Описание: |
Сдвигает значение в аккумуляторе на shift (значение в |
||||
|
диапазоне от –16 до 16) битов. |
||||
|
Например: |
|
|
||
|
register int result asm(“A”); |
||||
|
int i; |
|
|
||
|
result = __builtin_sftac(i); |
||||
|
Может создать: |
|
|
||
|
sftac A, w0 |
|
|
||
Прототип: |
int __builtin_sftac(int shift); |
||||
|
|
|
|
|
. |
Аргумент: |
shift — величина сдвига (отрицательная — арифметический |
||||
|
|
|
|
A |
|
|
сдвиг влево, положительная — арифметический сдвиг вправо) |
||||
Возвращаемое значение: Сдвинутое значение аккумулятора |
|||||
Операторы ассемблера / |
sftac |
|
|
|
|
машинные команды: |
|
|
|
|
|
Сообщения об ошибках |
Сообщение об ошибке будет выдано, если: |
||||
|
• результат не является аккумулятором |
||||
|
• shift — вне разрешенного диапазона, если определить |
||||
|
значение sh ft можно только на этапе исполнения, и ее |
||||
|
значение окажется за пределами разрешенного диапазона, на |
||||
|
этапе исполнения будет вызвано прерывание по |
||||
|
математической ошибке. |
|
|||
|
|
Wilson |
|
|
|
__builtin_subab |
by |
|
|
|
|
|
|
||||
Описание: |
Вычитает |
из заданного в качестве результата аккумулятора |
|||
|
содержание альтернативного аккумулятора и результат |
||||
|
помещает в заданный аккумулятор. Например: |
||||
|
register int result asm(“A”); |
||||
|
result=__builtin_subab(); |
||||
|
будет генерировать: |
|
|
||
|
addab A |
|
|
||
Прототип: |
int __builtin_subab(void); |
||||
Аргумент: |
Нет |
|
|
|
|
Возвращаемое значение: |
Результат вычитания в аккумуляторе. |
||||
Операторы ассемблера / |
sub |
|
|
|
|
машинные команды: |
|
|
|
|
|
Сообщения об ошибках |
Сообщение об ошибке будет выдано, если результат — не |
||||
Translated |
регистр аккумулятор. |
|
|
||
|
|
|
|
|
DS51284H(ru) стр. B-20 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_tblpage
Описание: |
Возвращает номер страницы с таблицей, чей адрес задан в |
||
|
качестве параметра. Аргумент p должен быть адресом объекта |
||
|
в пространствах EEdata, PSV или программ, в противном |
||
|
случае будет выдано сообщение об ошибке и компиляция |
||
|
завершится неудачно. См. атрибут space (space) в п. 2.3.1. |
||
|
«Определение атрибутов переменных» |
||
Прототип: |
unsigned int __builtin_tblpage(const void *p); |
||
Аргумент: |
p — адрес объекта |
|
|
Возвращаемое значение: Номер страницы таблицы для объекта, чей адрес задан в |
|||
|
качестве параметра. |
. |
|
|
A |
||
Операторы ассемблера / |
mov |
|
|
машинные команды: |
|
|
|
|
|
|
|
Сообщения об ошибках |
Следующее сообщение об ошибке будет выдано, если функция |
||
|
использована некорректно: |
||
|
«Argument to builtin_tblpage() is not the address of an |
||
|
object in code, p v, or eedata section». |
||
|
Аргументом может быть только явный адрес объекта. |
||
|
Например, если obj — объект в программной секции или |
||
|
секции только для чтения, следующий синтаксис правомерен: |
||
|
unsigned page = __builtin_tblpage(&obj); |
||
|
Wilson |
|
|
__builtin_tbloffset |
|
|
|
|
|
||
Описание: |
Возвращает смещение на странице с таблицей до объекта, чей |
||
|
адрес задан в качестве параметра. Аргумент p должен быть |
||
|
адресомby |
объекта в пространствах EEdata, PSV или программ, в |
|
|
противном случае будет выдано сообщение об ошибке и |
||
|
компиляция завершится неудачно. См. атрибут space (space) в |
||
|
п. 2.3.1. «Определение атрибутов переменных» |
||
Прототип: |
unsigned int __builtin_tbloffset(const void *p); |
||
Аргумент: |
p — адрес объекта |
|
|
Translated |
unsigned page = __builtin_tbloffset(&obj); |
Возвращаемое значение: Смещение на странице таблицы для объекта, чей адрес задан в качестве параметра.
Операторы ассемблера / mov
машинные команды:
Сообщения об ошибках Следующее сообщение об ошибке будет выдано, если функция использована некорректно:
«Argument to __builtin_tbloffset() is not the address of an object in code, psv, or eedata section».
Аргументом может быть только явный адрес объекта. Например, если obj — объект в программной секции или секции только для чтения, следующий синтаксис правомерен:
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-21 |
16-битовый компилятор Си. Руководство
__builtin_tblrdh
Описание: |
Генерирует команду tblrdh, чтобы прочитать старшее слово из |
|
Flash или EEdata памяти. Вы должны предварительно |
|
установить регистр TBLPAG на страницу, которой принадлежит |
|
адрес читаемого слова. Чтобы получить необходимый номер |
|
страницы и смещение на ней, необходимо использовать |
|
встроенные функции __builtin_tblpage() и |
|
__builtin_tbloffset(). |
|
. |
|
Подробнее о чтении и записи информации в программную Flash |
|
память см. документацию на конкретный микроконтроллер или |
|
A |
|
dsPIC Family Reference Manual. |
Прототип: |
insigned int __builtin_tblrdh( |
|
unsigned int offset); |
Аргумент: |
Wilson |
offset — смещение на странице до желаемого объекта |
Возвращаемое значение: Разряды с 23 по 16 читаемого адреса памяти, возвращаются в
|
младшем байте результата, старший байт — обнуляется. |
Операторы ассемблера / |
tblrdh |
машинные команды: |
|
Сообщения об ошибках |
Нет. |
__builtin_tblrdl
Описание: |
Генерирует команду tblrdl, чтобы прочитать младшее слово |
||
|
из Flash или EEdata памяти. Вы должны предварительно |
||
|
установить регистр TBLPAG на страницу, которой принадлежит |
||
|
адрес читаемого слова. Чтобы получить необходимый номер |
||
Translated |
страницыby |
и смещение на ней, необходимо использовать |
|
встроенные функции __builtin_tblpage() и |
|||
|
|||
|
__builtin_tbloffset(). |
||
|
Подробнее о чтении и записи информации в программную Flash |
||
|
память см. документацию на конкретный микроконтроллер или |
||
|
dsPIC Family Reference Manual. |
||
Прототип: |
insigned int __builtin_tblrdl( |
||
|
|
unsigned int offset); |
|
Аргумент: |
offset — смещение на странице до желаемого объекта |
||
Возвращаемое значение: |
Разряды с 15 по 0 читаемого адреса памяти. |
||
Операторы ассемблера / |
tblrdl |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
DS51284H(ru) стр. B-22 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_tblwth
Описание: |
Генерирует команду tblwth, чтобы записать старшее слово во |
||
|
Flash или EEdata память. Вы должны предварительно |
||
|
установить регистр TBLPAG на страницу, которой принадлежит |
||
|
адрес читаемого слова. Чтобы получить необходимый номер |
||
|
страницы и смещение на ней, необходимо использовать |
||
|
встроенные функции __builtin_tblpage() и |
||
|
__builtin_tbloffset(). |
|
|
|
Подробнее о чтении и записи информации в программную Flash |
||
|
память см. документацию на конкретный микроконтроллер или |
||
|
dsPIC Family Reference Manual. |
||
Прототип: |
|
. |
|
void __builtin_tblwth(unsigned int offset, |
|||
|
|
A |
unsigne int data); |
|
|
|
|
Аргумент: |
offset — смещение на странице до желаемого объекта |
||
|
data — слово данных, младший байт которого будет записан в |
||
|
разряды с 23 по 16 адреса желаемого объекта. |
||
Возвращаемое значение: Нет. |
|
|
|
Операторы ассемблера / |
tblwth |
|
|
машинные команды: |
|
Wilson |
|
Сообщения об ошибках |
Нет. |
|
|
|
|
|
|
__builtin_tblwtl |
|
|
|
|
|
||
Описание: |
Генерирует команду tblwtl, чтобы записать младшее слово во |
||
|
Flash или EEdata память. Вы должны предварительно |
||
|
установить регистр TBLPAG на страницу, которой принадлежит |
||
|
адресby |
читаемого слова. Чтобы получить необходимый номер |
|
|
страницы и смещение на ней, необходимо использовать |
||
|
встроенные функции __builtin_tblpage() и |
||
|
__builtin_tbloffset(). |
|
|
|
Подробнее о чтении и записи информации в программную Flash |
||
|
память см. документацию на конкретный микроконтроллер или |
||
|
dsPIC Family Reference Manual. |
||
Прототип: |
void __builtin_tblwtl(unsigned int offset, |
||
|
|
|
unsigne int data); |
Аргумент: |
offset — смещение на странице до желаемого объекта |
||
|
data — слово данных, которое будет записано в разряды с 15 |
||
|
по 0 адреса желаемого объекта. |
||
Возвращаемое значение: Нет. |
|
|
|
Операторы ассемблера / |
tblwtl |
|
|
машинные команды: |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
Translated |
|
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-23 |
16-битовый компилятор Си. Руководство
__builtin_write_NVM
Описание: |
Разрешает запись во Flash память путем выдачи необходимой |
|||
|
разблокирующей последовательности и установки бита записи в |
|||
|
регистре NVMCON |
|
|
|
Прототип: |
void __builtin_write_NVM(void); |
|||
Аргумент: |
Нет |
|
|
|
Возвращаемое значение: |
Нет. |
|
|
|
Операторы ассемблера / |
mov #0x55, Wn |
|
. |
|
машинные команды: |
mov Wn, _NVMKEY |
A |
||
|
mov #0xAA, Wn |
|||
|
mov Wn, _NVMKEY |
|||
|
|
|||
|
bset _NVMСON, #15 |
|
||
|
nop |
|
|
|
|
|
|
|
|
|
nop |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
|
|
|
||
__builtin_write_OSCCONL |
|
|
||
|
|
|||
Описание: |
Разблокирует и записывает аргумент в регистр OSCCONL |
|||
Прототип: |
void __bu ltin write_OSCCONL(unsigned char value); |
|||
Аргумент: |
value — байт для записи |
|
||
Возвращаемое значение: Нет. |
Wilson |
|
|
|
|
|
|
||
Операторы ассемблера / |
mov #0x46, w0 |
|
|
|
машинные команды(1): |
mov #0x57, w1 |
|
|
|
|
mov __OSCCON, w2 |
|
|
|
|
mov.b w0, [w2] |
|
|
|
|
by |
|
|
|
|
mov.b w1, [w2] |
|
|
|
|
mov.b value, [w2] |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
Примечание 1. Точная последовательность может отличаться. |
||||
|
|
|
||
builtin write OSCCONH |
|
|
||
|
|
|||
Описание: |
Разблокирует и записывает аргумент в регистр OSCCONH |
|||
Прототип: |
void __builtin_write_OSCCONH(unsigned char value); |
|||
Аргумент: |
value — байт для записи |
|
||
Возвращаемое значение: |
Нет. |
|
|
|
Операторы ассемблера / |
mov #0x78, w0 |
|
|
|
машинные команды(1): |
mov #0x9A, w1 |
|
|
|
Translated |
mov __OSCCON+1, w2 |
|
|
|
mov.b w0, [w2] |
|
|
||
mov.b w1, [w2] |
|
|
||
|
mov.b value, [w2] |
|
|
|
Сообщения об ошибках |
Нет. |
|
|
|
Примечание 1. Точная последовательность может отличаться.
DS51284H(ru) стр. B-24 |
© 2008 Microchip Technology Inc. |
Приложение B Встроенные функции
__builtin_write_RTCWEN
Описание: |
Разрешает запись в таймер часов реального времени путем |
|
выдачи необходимой разблокирующей последовательности и |
|
установки бита разрешения записи в регистре RCFGCAL. |
Прототип:
Аргумент: Возвращаемое значение: Операторы ассемблера / машинные команды:
Сообщения об ошибках
Translated
void __builtin_write_RTCWEN(void);
Нет. |
|
|
|
Нет. |
|
|
|
mov #0x55, Wn |
. |
||
mov Wn, _NVMKEY |
|||
A |
|||
mov #0xAA, Wn |
|||
|
|||
mov Wn, _NVMKEY |
|
||
bset _RCFGCAL, #13 |
|
||
nop |
Wilson |
|
|
|
|
||
nop |
|
|
|
Нет. |
|
|
|
by |
|
|
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. B-25 |
16-битовый компилятор Си. Руководство
Для заметок.
A . Wilson by Translated
DS51284H(ru) стр. B-26 |
© 2008 Microchip Technology Inc. |