Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
270
Добавлен:
23.03.2016
Размер:
346.99 Кб
Скачать

СПРАВОЧНЫЙ МАТЕРИАЛ

 

Роман Абраш

Книга по работе

 

 

 

 

 

 

г. Новочеркасск

с WinAVR и AVR Studio

 

E-mail: arv@radioliga.com

 

 

 

 

 

alloca.h – Выделение памяти

 

Классифицирующие функции следую-

 

Продолжение.

 

 

 

 

в стеке

 

щие:

 

Начало в №1-9/2010

 

 

 

 

Определение:

 

isalnum()

 

 

 

 

 

void * alloca(size_t size);

 

isalpha()

AVR-LIBC

Описание: функция выделяет size

 

isascii()

 

 

 

 

 

байт в области стека вызывающего мо-

 

isblank()

ВВЕДЕНИЕ

дуля. Это временно выделяемое про-

 

iscntrl()

Комплект WinAVR содержит много раз-

странство автоматически освобождается,

 

isdigit()

личных средств для разработки программ-

когда функция, вызывающая alloca(), воз-

 

isgraph()

ного обеспечения микроконтроллерных си-

вращает управление в вызывающую ее

 

islower()

стем на основе микроконтроллеров AVR.

функцию. alloca() реализована в виде мак-

 

isprint()

Однако, сам по себе компилятор, каким бы

роса, который транслируется в inline-фун-

 

ispunct()

хорошим и универсальным он ни был, не

кцию __builtin_alloca(). Это означает, что

 

isspace()

содержит главного: набора библиотечных

нет возможности обращаться к функции по

 

isupper()

функций. Существует некий набор библио-

ее адресу или изменять ее поведение при

 

isxdigit()

течных функций, ставший стандартным, т.е.

связывании с другими библиотеками.

 

Эти функции получают в качестве па-

набор, к которому привыкли все без исклю-

Возвращаемое значение: функция

 

раметра символ, и возвращают истин-

чения программисты Си, его так и называ-

возвращает указатель на начало выделен-

 

ное или ложное значение в зависимос-

ют стандартной библиотекой.

ной области. Если происходит переполне-

 

ти от того, как этот символ прокласси-

Очевидно, для полноценной разработ-

ние стека, поведение программы не опре-

 

фицирован. Если параметр не является

ки ПО для микроконтроллеров AVR так же

делено.

 

unsigned char – все функции возвращают

необходима такая стандартная библиотека.

Предупреждение: избегайте использо-

 

FALSE.

И она включена в состав WinAVR: это биб-

вания функции внутри списка параметров

 

Преобразующие функции следую-

лиотека AVR-LIBC. Она представляет собой

функций.

 

щие:

набор объектных модулей и соответствую-

assert.h – Диагностика

 

toascii()

щих заголовочных файлов, обеспечивает

 

tolower()

большинство традиционно-стандартных

Определение:

 

toupper()

функций, а так же ряд платформо-ориенти-

#include <assert.h>

 

Эти функции так же получают в каче-

рованных расширений, т.е. функций, специ-

Описание: этот заголовочный файл

 

стве параметра символ, а возвращают уже

фичных только для микроконтроллеров

определяет вспомогательные отладочные

 

преобразованный символ.

AVR. Стандартные функции порой имеют от-

возможности.

 

 

 

клонения от привычного поведения в «ком-

Так как в большинстве приложений нет

 

Функции модуля

пьютерном Си», что связано с ограничени-

стандартно заданного потока вывода для

 

Обратите внимание на то, что параметр

ями, накладываемыми архитектурой мик-

ошибок,генерированиепечатаемыхсообще-

 

этих функций имеет тип int, хотя использу-

роконтроллера. Программист должен быть

ний об ошибках по умолчанию отключено.

 

ется как символ, т.е. char.

осведомлен о таких отклонениях.

Эти сообщения будут генерироваться толь-

 

 

 

Далее будут рассмотрены основные

ко в том случае, если в приложении опре-

 

isalnum()

составляющие части библиотеки AVR-LIBC

делен макрос __ASSERT_USE_STDERR

 

 

Определение:

с необходимыми комментариями. Они раз-

прежде подключения файла <assert.h>. По

 

 

int isalnum (int c)

делены на три группы: Стандартные моду-

умолчанию для остановки приложения дол-

 

Описание: Проверяет, является ли ар-

ли, AVR-специфичные модули и Вспомога-

жна использоваться только функция abort().

 

 

гумент алфавитно-цифровым символом.

тельные модули.

Применение:

 

 

Результат эквивалентен (isalpha(с) ||

 

 

 

 

 

#define assert(<выражение>)

 

 

 

 

 

 

 

isdigit(c))

СТАНДАРТНЫЕ МОДУЛИ

Макрос assert() принимает в качестве

 

 

 

 

Стандартные модули – это модули, ре-

параметра выражение, проверяет его на

 

isalpha()

ализующие набор привычных функций, ха-

истинность и, если выражение ложно, вы-

 

 

Определение:

рактерных для всех Си-программ вне зави-

зывает функцию abort() для завершения

 

 

int isalpha (int c)

симости от платформы. В этот раздел вклю-

приложения. При этом в стандартный по-

 

 

Описание: Проверяет, является ли сим-

чен и ряд модулей, определяющих некото-

ток вывода ошибок выводится соответ-

 

 

вол алфавитным. Результат эквивалентен

рые важные для GCC-компилятора констан-

ствующее сообщение. Если выражение

 

 

(isupper(c) || islower(c))

ты, а так же модули, необходимые для всех

истинно, этот макрос не выполняет ника-

 

 

 

 

прочих библиотечных модулей AVR-LIBC.

ких действий.

 

isascii()

Далее будет принят следующий фор-

Все макросы assert() могут быть уда-

 

 

Определение:

мат изложения материала:

лены из текста программы при компиляции

 

 

int isascii (int c)

- жирным шрифтом выделяется

с параметром –DNDEBUG.

 

 

Описание: Проверяет, является ли па-

наименование раздела, как правило, со-

 

 

 

 

раметр 7-битным ASCII-символом.

впадающего с соответствующим моду-

ctype.h – Символьные операции

 

 

 

 

лем библиотеки;

Тут определены различные функции

 

isblank()

- подчеркнутым шрифтом выделя-

над символами.

 

 

Определение:

ется функция или макрос, опреджеляе-

Определение:

 

 

int isblank (int c)

мый в рассматриваемом модуле;

#include <ctype.h>

 

Описание: Проверяет, является ли сим-

- после слова Определение приво-

Описание: этот заголовочный файл

 

 

вол «пустым», т.е. является ли он пробелом

дится прототип функции, как он опреде-

подключает к проекту некоторые функции

 

или символом табуляции.

лен в соответствущем хидере.

(см. далее детальное описание каждой) об-

 

 

 

 

Далее следует подробное описание

работки символов. Функции разделены на

 

iscntrl()

функции или макроса, иногда с поясне-

две группы: классифицирующие символ и

 

 

Определение:

ниями.

преобразующие символ.

 

 

int iscntrl (int c)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 7

Радиолюбитель – 10/2010

 

 

 

 

 

 

 

 

 

 

 

 

 

СПРАВОЧНЫЙ МАТЕРИАЛ

Описание: Проверяет, является ли сим-

преобразует в непредсказуемые, делая

Дальние указатели для адресации бо-

вол управляющим.

текст нечитаемым.

лее, чем 64К памяти

 

 

 

 

typedef int32_t int_farptr_t – целое со

isdigit()

tolower()

знаком для хранения дальнего указателя.

Определение:

Определение:

typedef uint32_t uint_farptr_t – целое

int isdigit (int c)

int tolower (int c)

беззнаковое для хранения дальнего указа-

Описание: Проверяет, является ли сим-

Описание: Преобразует, если возмож-

теля.

 

вол цифровым.

но, регистр символа к нижнему.

 

 

 

 

 

Макросы для спецификатора форма-

isgraph()

toupper()

тов printf() и scanf()

 

Определение:

Определение:

Для С++ эти макросы подключаются

int isgraph (int c)

int toupper (int c)

только в том случае, если определен сим-

Описание: Проверяет, является ли сим-

Описание: Преобразует, если возмож-

вол __STDC_LIMIT_MACROS до подключе-

вол «псевдографическим».

но, регистр символа к верхнему.

ния файла <inttypes.h>.

 

 

 

 

Модуль содержит большое количество

islower()

errno.h – Системные ошибки

макросов для определения форматов вво-

Определение:

Определение:

да-вывода различных чисел. Т.к. эти мак-

int islower (int c)

#include <errno.h>

росы применяются в основном встроенны-

Описание: Проверяет, является ли «ре-

Описание: многие библиотечные фун-

ми в библиотеку функциями, практическая

гистр» символа «нижним».

кции при возникновении ошибок устанав-

их ценность для конечного пользователя

 

ливают значение встроенной глобальной

невелика. Поэтому из рассмотрения в дан-

isprint()

переменной errno. Подключение заголовоч-

ном издании они опущены.

 

Определение:

ного файла errno.h вводит этим значениям

math.h – Математика

 

int isprint (int c)

символьные эквиваленты.

 

Описание: Проверяет, является ли сим-

Предупреждение: использование гло-

Определение:

 

вол «печатаемым», т.е. любым, который

бальной переменной errno в мультизадач-

#include <math.h>

 

можно отобразить на печатающем устрой-

ных или многопоточных приложениях не

Описание: этот заголовочный файл

стве (включая пробел).

является удачным. Проблема в том, что ее

определяет некоторые базовые константы

 

значение может быть изменено другим по-

и математические операции.

 

ispunct()

током в промежутке между ее установкой и

Функции, определенные этим файлом,

Определение:

началом анализа в исходном потоке.

требуют связывания с libm.a. Так же сле-

int ispunct (int c)

Примечание. Символьные константы,

дует учитывать, что математические фун-

Описание: Проверяет, является ли сим-

описанные в этом файле, не имеют практи-

кции не генерируют исключений и не из-

вол печатаемым, но при этом не принадле-

ческой ценности для начинающего разра-

меняют переменную errno. Для улучшения

жит алфавитно-цифровым или «пустым».

ботчика, поэтому не приводятся – вы може-

качества оптимизации GCC они реализо-

 

те самостоятельно изучить их по содержи-

ваны в большинстве своем с атрибутом

isspace()

мому указанного файла.

const.

 

Определение:

 

 

 

 

int isspace (int c)

inttypes.h – Целочисленные

Определения модуля

 

Описание: Проверяет, является ли

преобразования

#define

M_PI

символ символом-разделителем. В этой ре-

Определение:

3.141592653589793238462643 – число p

ализации AVR-LIBC в число этих символов

#include <inttypes.h>

#define

M_SQRT2

входят:

Описание: этот заголовочный файл

1.4142135623730950488016887 – квадрат-

- пробел

использует определения целых чисел

ный корень из двух

 

- пролистывание формы (form-feed, “\f”)

stdint.h и расширяет их дополнительными

#define NAN __builtin_nan(«») – кон-

- перевод строки (“\n”)

вариантами, используемыми в работе ком-

станта определения «не числа»

- возврат каретки (“\r”)

пилятора.

#define INFINITY __builtin_inf() – кон-

- горизонтальная табуляция (“\t”)

В настоящее время расширения вклю-

станта определения бесконечно большого

- вертикальная табуляция (“\v”)

чают 2 дополнительных целочисленных

значения

 

 

типа для «дальних указателей» (т.е. для

 

 

isupper()

указателей в коде, способных адресовать

Функции модуля

 

Определение:

память более чем 64К), а так же все типы,

cos()

 

int isupper (int c)

поддерживаемые функциями форматиро-

Определение:

 

Описание: Проверяет, является ли сим-

ванного вывода из stdio.h. Так как эти фун-

double cos (double x)

 

вол буквой в верхнем регистре.

кции не реализуют полного комплекта спе-

Описание: возвращает косинус аргу-

 

цификаций, определяемых ISO 9899:1999,

мента x (должен быть в радианах).

isxdigit()

включены только реализованные возмож-

 

 

Определение:

ности.

fabs()

 

int isxdigit (int c)

Идея подхода в том, что каждый тип,

Определение:

 

Описание: Проверяет, является ли сим-

определенный в stdint.h, сопровождает-

double fabs (double x)

 

волдопустимойшестнадцатеричнойцифрой.

ся макросами, позволяющими опреде-

Описание: возвращает модуль значе-

 

лить соответствующий объект формати-

ния аргумента x.

 

toascii()

рования для функций printf() или scanf().

 

 

Определение:

Пример:

fmod()

 

int toascii (int c)

 

 

Определение:

 

#include <inttypes.h>

 

 

Описание: Преобразует символ в 7-бит-

 

double fmod (double x, double y)

uint8_t smallval;

 

ный ASCII-символ путем очистки старших

 

Описание: возвращает остаток от де-

int32_t longval;

 

битов.

 

ления x/y.

 

Предупреждение: пользователи могут

...

 

 

 

быть недовольны, если вы применяете эту

printf(«The hexadecimal value of smallval is

 

modf()

 

«PRIx8», the decimal value of longval is

 

 

функцию, т.к. многие символы (например,

 

Определение:

 

«PRId32 «.\n», smallval, longval);

 

 

национальных алфавитов) эта функция

 

double modf (double x, double *iptr)

5 8

Радиолюбитель – 10/2010

 

СПРАВОЧНЫЙ МАТЕРИАЛ

 

Описание: функция разбивает аргу-

cosh()

Описание: возвращает 1, если аргу-

мент x на целую и дробную части, каждая

Определение:

мент x бесконечно малое значение, и 0 – в

из которых имеет тот же знак, что и x. Фун-

double cosh (double x)

противном случае.

кция возвращает дробную часть (со зна-

Описание: возвращает гиперболичес-

 

 

ком), а целую часть (со знаком) помещает

кий косинус аргумента x.

isinf()

по указателю iptr.

 

Определение:

 

Примечание: если указатель iptr нуле-

sinh()

int isinf (double x)

вой – возврат целой части пропускается.

Определение:

Описание: возвращает -1, если аргу-

 

 

 

 

 

 

 

double sinh (double x)

мент x – «минус-бесконечность», 1, если

 

sin()

Описание: возвращает гиперболичес-

аргумент «плюс-бесконечность» и 0 – в

 

Определение:

кий синус аргумента x.

противном случае.

 

double sin (double x)

 

 

 

 

Описание: возвращает синус аргумен-

tanh()

square()

та x (должен быть в радианах).

Определение:

Определение:

 

 

 

 

 

 

 

double tanh (double x)

double square (double x)

 

sqrt()

Описание: возвращает гиперболичес-

Описание: возвращает x в квадрате.

 

 

 

 

 

 

 

 

Определение:

кий тангенс аргумента x.

Примечание: это нестандартная для С

 

double sqrt (double x)

 

функция.

 

Описание: возвращает не отрицатель-

acos()

 

 

ный квадратный корень аргумента x.

Определение:

copysign()

 

 

 

 

 

 

 

double acos (double x)

Определение:

 

tan()

Описание: возвращает арккосинус

static double copysign (double x, double y)

 

Определение:

аргумента x. Значение аргумента должно

Описание: возвращает x, но со знаком

 

double tan (double x)

быть в пределах допустимых значений

от y. Эта функция работает даже если лю-

 

Описание: возвращает тангенс аргу-

-1…+1. Возвращается значение в пределах

бой из аргументов (или оба) – бесконечность

мента x (должен быть в радианах).

-p/2…+p/2 радиан.

или пренебрежимо малые числа.

 

floor()

asin()

fdim()

 

Определение:

Определение:

Определение:

 

double floor (double x)

double asin (double x)

double fdim (double x, double y)

 

Описание: возвращает в виде числа с

Описание: возвращает арксинус ар-

Описание: возвращает наибольшее

плавающей точкой ближайшее целое чис-

гумента x. Значение аргумента должно

значение из вариантов (x-y) или 0. Если хотя

ло, меньшее или равное аргументу x.

быть в пределах допустимых значений

бы одно из чисел бесконечно мало – воз-

 

 

 

 

 

 

 

-1…+1. Возвращается значение в пределах

вращается бесконечно малое число.

 

ceil()

-p/2…+p/2 радиан.

 

 

 

Определение:

 

fma()

 

double ceil (double x)

atan()

Определение:

 

Описание: возвращает в виде числа с

Определение:

double fma (double x, double y, double z)

плавающей точкой ближайшее целое чис-

double atan (double x)

Описание: функция «умножение с на-

ло, большее или равное аргументу x.

Описание: возвращает арктангенс ар-

коплением». Возвращает (x*y)+z, одна-

 

 

 

 

 

 

 

гумента x. Возвращается значение в пре-

ко, в процессе вычислений промежуточ-

 

frexp()

делах -p/2…+p/2 радиан.

ный результат не округляется, что позво-

 

 

 

 

 

 

 

 

Определение:

 

ляет порой улучшить точность вычисле-

 

double frexp (double x, int *pexp)

atan2()

ний.

 

Описание: функция разбивает число x

Определение:

 

 

на два множителя: первый множитель – это

double atan2 (double y, double x)

fmax()

число 0 или число в диапазоне (по модулю)

Описание: возвращает арктангенс ча-

Определение:

от 0,5 до 1, – функция возвращает в каче-

стного x/y. Возвращается значение в пре-

double fmax (double x, double y)

стве результата; второй множитель образу-

делах -p…+p радиан.

Описание: возвращает наибольший из

ется как число 2 в степени pexp. Таким об-

 

аргументов. Если оба аргумента NAN - воз-

разом, если результат функции обозначить

log()

вращается NAN, если один аргумент NAN,

y, то x = y * 2pexp.

Определение:

возвращается другой.

 

Если x равно нулю – обе возвращае-

double log (double x)

 

 

мые части равны нулю. Если x не является

Описание: возвращает натуральный

fmin()

конечным числом – функция возвращает x,

логарифм аргумента x.

Определение:

а pexp равно нулю.

 

double fmin (double x, double y)

 

Если второй параметр функции NULL,

log10()

Описание: возвращает наименьший из

то функция воспринимает это как указание

Определение:

аргументов. Если оба аргумента NAN - воз-

не вычислять и не возвращать значение

double log10 (double x)

вращается NAN, если один аргумент NAN,

pexp.

Описание: возвращает десятичный

возвращается другой.

 

 

 

 

 

 

 

логарифм аргумента x.

 

 

 

ldexp()

 

signbit()

 

 

 

 

 

 

 

Определение:

pow()

Определение:

 

double ldexp (double x, int exp)

Определение:

int signbit (double x)

 

Описание: возвращает число x, умно-

double pow (double x, double y)

Описание: возвращает 1, если знако-

женное на 2 в степени exp.

Описание: возвращает x, возведенное

вый бит у аргумента x установлен.

 

 

 

 

 

 

 

в степень y.

Примечание: это не то же самое, что

 

exp()

 

результат (x < 0.0), так как спецификация

 

 

 

 

 

 

Определение:

isnan()

IEEE 754 допускает наличие знака у нуля!

 

double exp (double x)

Определение:

Значение (-0.0 < 0.0) ложно, но signbit(-0.0)

 

Описание: возвращает е в степени x

int isnan (double x)

возвратит ненулевое значение!

(экспоненциальная функция).

 

 

 

 

 

 

 

 

 

 

 

 

5 9

Радиолюбитель – 10/2010

 

 

 

 

 

 

 

 

 

СПРАВОЧНЫЙ МАТЕРИАЛ

trunс()

Врезка. Пример использования функций.

Определение:

 

 

double trunc (double x)

#include <setjmp.h>

 

Описание: возвращает округленное до

 

ближайшего целого, не большего по моду-

jmp_buf env; // env – переменная-метка

 

лю аргумента x, число.

int main (void){

 

isfinite()

if (setjmp (env)){

 

... здесь должна обработаться ошибка ...

Определение:

}

 

static int isfinite (double x)

while (1){

 

Описание: возвращает ненулевое зна-

 

чение, если аргумент x – конечное число:

... основной цикл, в котором вызывается foo() ...

не бесконечность (с любым знаком) и не

}

 

NAN.

}

 

 

...

 

hypot()

void foo (void){

 

Определение:

... что-то делается ...

 

double hypot (double x, double y)

if (err){

 

Описание: возвращает квадратный

// а если происходит ошибка – происходит переход в главную функцию longjmp (env, 1);

корень из суммы квадратов аргументов.

}

 

Применение этой функции вместо ее экви-

}

 

валента sqrt(x*x + y*y) более предпочтитель-

 

 

 

 

но, так как обеспечивает лучшую точность.

 

 

Исключается ошибка промежуточного ок-

Использование этих подходов может

Примечаниe от автора

ругления, ошибки переполнения (при боль-

сделать программу сложной для понима-

Не смотря на некоторую гибкость воз-

ших значениях аргументов) и «исчезнове-

ния, а так же может привести к потере кон-

можностей, предлагаемых функциями

ния» (при малых значениях) результата.

текста глобальных регистровых перемен-

модуля setjmp.h, настоятельно не реко-

 

ных. Поэтому по возможности следует ис-

мендуется применять их, особенно в слу-

round()

кать альтернативные пути.

чае, когда общая квалификация програм-

Определение:

Пример использования функций см.

миста невысока (т.е. начинающими).

double round (double x)

на врезке:

 

Описание: возвращает округленное до

 

stdint.h – Стандартные

ближайшего целого значение аргумента x,

Функции модуля

целые числа

но при этом не учитывает правило «полови-

 

Модуль вводит описания различных

ны единицы». Переполнение не возникает.

setjmp()

типов целых чисел, определяемых стан-

Примечание: если аргумент – целое

Определение:

дартом С99. Просто используйте для оп-

число или бесконечность – оно и возвра-

int setjmp (jmp_buf jmpb)

ределения переменных разрядностью N

щается. Если аргумент NAN – возвращает-

Параметры:

бит (где N может быть 8, 16, 32 или 64)

ся NAN.

jmp_buf jmpb – переменная сохранения

следующую форму записи типа:

 

контекста.

[u]intN_t. Например, uint8_t – эквива-

lround()

Описание: функция сохраняет кон-

лент unsigned char; а int16_t – эквива-

Определение:

текст стека и «окружения» в переменной

лент signed int.

long lround (double x)

jmpb для последующего использования

Кроме того, вводится большое количе-

Описание: возвращает целое число. В

в функции longjmp(). Сохраненный кон-

ство макросов и констант, которые можно

остальном аналогична round(), кроме того,

текст теряется, если происходит возврат

использовать в своих программах.

что ошибка переполнения возможна.

из функции, использовавшей setjmp().

 

 

Функция возвращает 0, если возврат

Типы целых чисел

lrint()

произошел немедленно, и не 0, если воз-

Следующие типы вводят (определяют)

Определение:

врат произошел при вызове longjmp() с ис-

обозначения-синонимы типам целых чисел

long lrint (double x)

пользованием сохраненного контекста.

по размеру в битах. Любой из этих типов

Описание: возвращает округленное до

 

может быть представлен стандартным эк-

целого значение аргумента х с учетом «пра-

longjmp()

вивалентом, однако вводимые типы имеют

вила половины», т.е. 1,5 и 2,5 будут округ-

Определение:

более короткую запись, что, несомненно,

лены до 2.

void longjmp (jmp_buf jmpb, int ret)

более удобно:

Примечание: возвращаемое значение

__ATTR_NORETURN__

int8_t – байт со знаком (8 бит)

может быть LONG_MIN (т.е. 0x80000000),

Параметры:

uint8_t – байт без знака (8 бит)

если аргумент – не конечное число или было

jmp_buf jmpb – переменная сохранения

int16_t – целое число со знаком (16 бит)

переполнение.

контекста.

uint16_t – целое число без знака (16 бит)

setjmp.h – Нелокальные

int ret – значение, используемое для

int32_t – длинное целое число со зна-

возврата.

ком (32 бита)

переходы goto

Описание: функция осуществляет не-

uint32_t – длинное целое число без зна-

Подробное описание

локальный переход к сохраненному ранее

ка (32 бита)

Когда в тексте программы применяет-

контексту. Возврата из функции в традици-

int64_t – большое длинное число со зна-

ся оператор goto, он позволяет осуществить

онном понимании нет, нет и возвращаемо-

ком (64 бита)

переход только внутри функции, где он при-

го значения.

uint64_t – большое длинное число без

менен (т.е. локально). Чтобы осуществить

Функция восстанавливает окружение

знака (64 бита)

переход в произвольное место программы,

(т.е. состояние среды) в том виде, как со-

 

определены функции setjmp() и longjmp(). Их

хранено ранее в переменной jmpb, после

Вводятся 2 типа для указателей:

использование позволяет, например, реа-

чего осуществляет передачу управления

intptr_t – то же самое, что и int16_t, ис-

лизовать более эффективно обработку

так, как будто завершилась функция

пользуется для хранения указателя

ошибок и исключительных ситуаций при

setjmp() в том месте, откуда была вызвана,

uintptr_t – то же самое. Что и uint16_t,

низкоуровневом программировании.

но с возвратом значения ret.

используется для хранения указателя

6 0

Радиолюбитель – 10/2010

 

СПРАВОЧНЫЙ МАТЕРИАЛ

 

Ряд типов для чисел, содержащих

 

INT8_MIN – минимальное число типа

 

INTPTR_MAX

 

числа с числом битов не менее опреде-

 

int8_t

 

INTPTR_MIN

 

ленного:

 

UINT8_MAX – максимальное число типа

 

UINTPTR_MAX

 

 

int_least8_t – для чисел со знаком не

 

uint8_t

 

INTMAX_MAX

 

более чем из 8 битов

 

INT16_MAX – максимальное число типа

 

INTMAX_MIN

 

 

uint_least8_t – для чисел без знака не

 

int16_t

 

UINTMAX_MAX

 

более чем из 8 битов

 

INT16_MIN – минимальное число типа

 

 

 

 

int_least16_t – для чисел со знаком не

 

int16_t

 

Имеется так же ряд констант макси-

более чем из 16 бит

 

UINT16_MAX – максимальное число

 

мальных значений для специальных типов

 

uint_least16_t – для чисел без знака не

 

типа uint16_t

 

(эти определения для С++ так же требуют

более чем из 16 бит

 

INT32_MAX – максимальное число типа

 

наличия

определения

 

int_least32_t – для чисел со знаком не

 

int32_t

 

__STDC_LIMIT_MACROS до подключения

более чем из 32 битов

 

INT32_MIN – минимальное число типа

 

модуля stdint.h):

 

 

uint_least32_t – для чисел без знака не

 

int32_t

 

PTRDIFF_MAX

 

более чем из 32 битов

 

UINT32_MAX – максимальное число

 

PTRDIFF_MIN

 

 

int_least64_t – для чисел со знаком не

 

типа uint32_t

 

SIG_ATOMIC_MAX

 

более чем из 64 битов

 

INT64_MAX – максимальное число типа

 

SIG_ATOMIC_MIN

 

 

uint_least64_t – для чисел без знака не

 

int64_t

 

SIZE_MAX

 

более чем из 64 битов

 

INT64_MIN – минимальное число типа

 

 

 

 

Определения типов для чисел заданной

 

int64_t

 

Макросы задания числовых констант

размерности. Обрабатывающихся с макси-

 

UINT64_MAX – максимальное число

 

Модуль определяет ряд макросов-фун-

мальной скоростью31 (расшифровка типов

 

типа uint64_t

 

кций, позволяющих определять числовые

не приводится ввиду явной очевидности):

 

 

 

 

константы заданного размера без исполь-

 

int_fast8_t

 

Аналогичные константы предельных

 

зования «суффиксов» размерности:

 

uint_fast8_t

 

значений определены и для всех других ти-

 

INT8_C(value) – константа 8-битная со

 

int_fast16_t

 

пов чисел (приводятся без описания):

 

знаком

 

 

uint_fast16_t

 

INT_LEAST8_MAX

 

UINT8_C(value) – константа 8-битная без

 

uint_fast32_t

 

INT_LEAST8_MIN

 

знака

 

 

int_fast64_t

 

UINT_LEAST8_MAX

 

INT16_C(value) – константа 16-битная со

 

uint_fast32_t

 

INT_LEAST16_MAX

 

знаком

 

 

 

 

INT_LEAST16_MIN

 

UINT16_C(value) – константа 16-битная

 

Определения типов целых чисел, спо-

 

UINT_LEAST16_MAX

 

без знака

 

собных хранить максимально возможные

 

INT_LEAST32_MAX

 

INT32_C(value) – константа 32-битная со

числа среди поддерживаемых знаковых или

 

INT_LEAST32_MIN

 

знаком

 

беззнаковых:

 

UINT_LEAST32_MAX

 

UINT32_C(value) – константа 32-битная

 

intmax_t – наибольшее целое со знаком

 

INT_LEAST64_MAX

 

без знака

 

(аналог int64_t)

 

INT_LEAST64_MIN

 

INT64_C(value) – константа 64-битная со

 

uintmax_t – наибольшее целое без зна-

 

UINT_LEAST64_MAX

 

знаком

 

ка (аналог uint64_t)

 

INT_FAST8_MAX

 

UINT64_C(value) – константа 64-битная

 

 

 

INT_FAST8_MIN

 

без знака

 

 

Константы

 

UINT_FAST8_MAX

 

INTMAX_C(value) – константа наиболь-

 

В модуле определен ряд констант (мак-

 

INT_FAST16_MAX

 

шего размера со знаком

 

росов), определяющих предельные значе-

 

INT_FAST16_MIN

 

UINTMAX_C(value) – константа наиболь-

ния для чисел каждого типа. Данные кон-

 

UINT_FAST16_MAX

 

шего размера без знака

 

станты для программ на С++ подключают-

 

INT_FAST32_MAX

 

Использование этих макросов вместо

ся только в том случае, если определено

 

INT_FAST32_MIN

 

простых чисел позволит избежать ошибок,

__STDC_LIMIT_MACROS до подключения

 

UINT_FAST32_MAX

 

связанных с определением размерности

модуля stdint.h.

 

INT_FAST64_MAX

 

результата вычислений с константами.

 

INT8_MAX – максимальное число типа

 

INT_FAST64_MIN

 

 

 

int8_t

 

UINT_FAST64_MAX

 

 

 

 

 

 

 

 

 

 

 

 

31 Это не более чем условность – на самом деле вводимые «скоростные» типы, как и все предыдущие, есть всего

 

 

 

лишь синонимы ранее определенным, т.е. обрабатываются компилятором абсолютно с той же скоростью. Очевидно, эти

 

 

 

типы введены для совместимости с GCC для других платформ.

 

 

 

Продолжение в №11/2010

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6 1

Радиолюбитель – 10/2010

Соседние файлы в папке Книга по работе с WinAVR и AVR Studio