Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать

Руководство пользователя по 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.

__builtin_divmodsd

Приложение 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.

Соседние файлы в папке Микропроцессорная техника Сторожок