Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессоры(Коротицкий Евгений Викторович) / лабы_гр3480 / Основы языка Си для микроконтроллеров AVR.doc
Скачиваний:
1505
Добавлен:
18.04.2015
Размер:
797.7 Кб
Скачать
      1. Директива #line

Директиву #line можно использовать, чтобы изменить встроенные макросы

_LINE_и_FILE_ (см.1.1.4Встроенные макросы).

Синтаксис:

#1iпе целая_константа ["имя_файла"]

Пример:

/* Установим встроенный макрос _LINE_ в 25, а _FILE_ в "test.с" */

#line 25 "test.с"

/* Установим встроенный макрос _LINE_ в 36 */

#line 36

      1. Директива #error

Директиву terror можно использовать, чтобы остановить компиляцию и отобразить сообщение об ошибках.

Синтаксис:

#errorсообщение;

Пример:

#error Здесь ошибка! // В этом месте компиляция будет остановлена и будет выдано сообщение: "Здесь ошибка!"

      1. Директивы #asmи #endasm

Директивы #asmи #endasmможно использовать для включения в любом месте исходной программы ассемблерного кода.

Директива #asmговорит компилятору о начале ассемблерного кода, а директива #endasm— о его завершении.

Пример:

/* Вставка ассемблерного кода */

void main(void)

{

#asm // начало ассемблерного кода

sei ; // разрешаем глобальные прерывания

#endasm // окончание ассемблерного кода

}

    1. Зарезервированные ключевые слова

Следующий список ключевых слов зарезервирован компилятором. Эти слова НЕ МОГУТ использоваться как имена идентификаторов.

break

flash

eeprom

sfrw

bit

float

else

static

case

for

enum

struct

char

funcusd

extern

switch

const

goto

register

typedef

continue

if

return

union

default

inline

short

unsigned

defined

int

signed

void

do

interrupt

sizeof

volatile

double

long

sfrb

while

    1. Идентификаторы

Идентификатором является имя, которое даётся переменной, функции, метке или другому объекту. Идентификатор может содержать буквы латинского алфавита (A...Z,a...z) и цифры (0...9), а также символ подчеркивания (_), который считается буквой.

ИДЕНТИФИКАТОР может начинаться ТОЛЬКО с буквы или со знака подчеркивания.

При написании идентификатора имеет значение регистр, т. е. Temp,tempиTEMPбудут восприниматься компилятором как различные идентификаторы.

Максимальная длина идентификатора не должна превышать 31 символ.

В качестве идентификатора нельзя использовать зарезервированные ключевые слова (см. 1.2. Зарезервированные ключевые слова), а также имена функций библиотеки компилятора.

    1. Комментарии

Комментарий — это набор символов, который компилятором игнорируется. Однако на этот набор символов накладываются следующие ограничения. Внутри набора символов, который представляет комментарий, не может быть специальных символов, определяющих начало (/*) и конец (*/). Комментарии могут занимать как одну строку, так и несколько.

Пример:

/* комментарии к программе */

/* начало алгоритма */

или

/*комментарии можно записать в следующем виде, однако следует быть осторожным, чтобы внутри последовательности, которая компилятором игнорируется, не попались операторы программы, которые также будут игнорироваться */

    1. Константы

Константами называются перечисления величин в программе. В отличие от переменных такие имена нельзя изменять.

В языке Си разделяют четыре типа констант: целые константы, константы с плавающей точкой, символьные константы и строковые литералы.

Целая константа — это десятичное, двоичное, восьмеричное или шестнадцатеричное число, которое представляет целую величину в одной из следующих форм: десятичной, двоичной, восьмеричной или шестнадцатеричной.

Десятичная константа состоит из одной или нескольких десятичных цифр, причём первая цифра не должна быть нулем (в противном случае число будет воспринято как восьмеричное). Например, 9876.

Двоичная константа начинается с обязательной последовательностиOb и содержит одну или несколько двоичных цифр (цифры двоичной системы счисления: 0 или 1). Например, Оb1100.

Восьмеричная константа начинается с обязательного префикса 0 и содержит одну или несколько восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так как эти цифры не входят в восьмеричную систему счис­ления). Например, 0123.

Шестнадцатеричная константа начинается с обязательной последовательности Ох или ОХ и содержит одну или несколько шестнадцатеричных цифр (цифры, представляющие собой набор цифр шеснадцатеричной системы счисления: (0...9,A,B,C,D,E,F). Например, Охеа или ОХЕА.

Константа с плавающей точкой (floating point) — десятичное число, представленное в виде действительной величины с десятичной точкой или экспонентой.

Число с плавающей точкой состоит из целой и дробной части и/или экспоненты. Константы с плавающей точкой представляют положительные величины удвоенной точности (имеют тип double). Для определения отрицательной величины следует сформировать константное выражение, состоящее из знака минуса и положительной константы.

Например: -1.6Е-3, -0.072, -0.16Е5.

Символьная константа (Character) — представляется символом, заключённым в одиночные кавычки. Значением символьной константы является числовой код символа.

Например: 'g'.

Строковая константа (String), илилитерал, — последовательность символов (включая строковые и прописные буквы русского и латинского алфавита, а также цифры), заключённых в кавычки («...»).

Например: «Сидоров А.Г.», «город С-Петербург», «АБВГ1234», «» (пустая строка). Строковый литерал имеет тип char[].

Константы могут быть сгруппированы в массивы, которые могут иметь до 8 измерений.

Чтобы определить константы, хранящиеся во FLASH-памяти, следует использовать ключевые словаflash илиconst.

Чтобы определить константы, хранящиеся в EEPROM, следует использовать ключевое словоeeprom.

Чтобы определить константы, хранящиеся в регистрах, следует использовать ключевое слово register.

Константные выражения автоматически определяются в течение компиляции.

Пример:

/* Эти константы будут расположены в EEPROM*/

eeprom int int_constl=12-7; // Целая константа int_constl будет равна 5

eeprom char char_const='b'; // Символьная константа char_const будет равна числовому коду ASCII символа 'b', т. е. 0x62

/* Эти константы будут расположены во FLASH-памяти */

flash long long_int_const=136L; // Целая длинная константа

// long_int_const будет равна 136

flash int int_array[10]={9,16}; // Этот целочисленный массив имеет 10 членов, причём первые два это 9 и 16, а остальные нули

const int int_const2=0123; // Целая константаint_const2 будет равна 123 в восьмиричном или 83 в десятичном виде

/* Эта константа будет расположена в регистре */

register int int_const3=0xl0; // Целая константаint_const3 будет равна 16 в десятичном или 10 в // шестнадцатеричном виде

/* Эти константы будут расположены в SRAM*/

int int_const4=0bl0; // Целая константаint_const4 будет равна 2 в десятичном или 10 в двоичном виде

char string_const[]="Hello!"; // Это строковая константа