Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция - Си

.pdf
Скачиваний:
66
Добавлен:
18.05.2014
Размер:
431.24 Кб
Скачать

Язык Си для микроконтроллера AT91SAM7S

(С) СПбГЭТУ «ЛЭТИ». Кафедра ИИСТ. 2014 г.

1

Переменная

Переменная — именованная область памяти:

-имя;

-тип (→ размер в памяти);

-значение;

-время существования (как долго хранится);

-область видимости (откуда видна);

2

Целочисленные типы

Тип

Происхождение имени типа

Размер в памяти

int

'integer' - целое

4

байта

long int

'long' - длинный

4

байта

short int

'short' - короткий

2

байта

char

'character' - символ

1

байт

Знаковые

(могут хранить положительные и отрицательные числа)

тип → знаковый_тип signed тип → знаковый_тип

Беззнаковые

 

(только положительные числа)

 

unsigned тип → беззнаковый_тип

 

unsigned int; unsigned long int; unsigned short int;

 

unsigned char;

 

'int' может быть опущено

 

unsigned int → unsigned;

 

unsigned short int → unsigned short;

3

short int → short;

 

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

Инициализация — присвоение начального значения;

// Фрагмент программы

 

int offset = 25;

// десятичная

unsigned short a = 0xFFFF;

// 16-ая

char ch1 = 'a';

 

unsigned mask = 0x0000003F;

 

unsigned char с;

 

c = 25;

 

short var = 020;

// восьмеричная

long Var1;

 

Var1 = 0b0011;

// двоичная

4

Вещественные типы

Тип

Происхождение имени типа

Размер в памяти

float

'floating point' — плавающая

4

байта

 

точка

 

 

double

'double precision' — двойная

8

байт

 

точность

 

 

Число с плавающей точкой:

-мантисса;

-показатель степени;

Свойства:

-Конечное множество значений;

-Константная относительная точность представления числа;

-Округления;

-Неассоциативность операций:

(A * B) * C ≈ A * (B * C)

5

Вещественные типы - примеры

float a = 1000000.1; // 1000000.125

double b1

= 5000.0000003; //

5000.0000002999996

double b2

= b1 * 2.0;

//

10000.000000599999

float c1 = 1.0e+6;

// 1

* 10^6

float

c2

=

1.4e-3;

// 1.4 * 10^-3 = 0.0014

float

c3

=

10000.0;

// 1 * 10^4

float result1 = c1 * c2;

 

result1 = result1 * c3; // 14000000

 

float result2 = c2 * c3;

 

result2 = result2 * c1; // 13999999

 

unsigned int adcCode = 180;

 

double q = 3.3 / 256;

6

double adcInputVoltage = adcCode * q;

 

Логический тип

 

Тип

Происхождение имени типа

Размер в памяти

 

bool

'boolean' — булев (Дж. Буль)

1 байт

Значения

«флаг»

 

 

 

true — «правда» (1) false — «ложь» (0)

Примеры использования

// Заголовочный файл, необходимый для использования bool #include <stdbool.h>

...

bool buttonPressed = false; bool temperatureOk = true;

...

temperatureOk = false;

7

Тип void

('void' — пустой)

void — особый «тип»:

-создать переменную невозможно;

-показывает, что у функции отсутствуют аргументы;

-показывает, что функция не возвращает значения;

-используется для обобщённых указателей;

Примеры:

void func(void)

{

...

}

void *ptr = NULL;

8

Константы

Константа — переменная, которую невозможно изменить.

const тип → константный_тип

Преимущества констант:

-повышают читаемость исходного кода;

-уменьшают вероятность ошибок;

-упрощают компилятору задачу оптимизации кода;

Примеры:

const double q = 3.3 / 1024; unsigned int adcCode = 180;

double adcInputVoltage = adcCode * q; q = 0.125; // ошибка компиляции

const double pi = 3,1415926535; pi = 3.0; // ошибка компиляции

инициализация константы при её создании обязательна! 9

Классы памяти переменных

Класс памяти определяет:

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

-откуда к ней можно обратиться

Классы памяти:

- автоматический (

);

- статический (static);

 

- внешний (

/ extern);

- регистровый (register);

Любая переменная относится к одному из возможных классов памяти;

10