- •Основы языка си для микроконтроллеров avr
- •1. Основы языка Си для микроконтроллеров avr
- •Препроцессор языка Cи его команды
- •Директива #include
- •Директивы #define, #undef
- •Директивы #if, #ifdef, #ifndef, #else и #endif
- •Встроенные макросы
- •Директива #line
- •Директива #error
- •Директивы #asmи #endasm
- •Зарезервированные ключевые слова
- •Идентификаторы
- •Комментарии
- •Константы
- •Переменные
- •Массивы
- •Типы данных
- •Операнды и операции
- •Унарные операции
- •Бинарные операции
- •Приоритеты операций и порядок вычислений
- •Операторы
- •If-else
- •Оператор for
- •Do-while
- •Continue
- •Оператор-выражение
- •Пустой оператор
- •Составной оператор
- •Функции
- •Указатели
- •Доступ к регистрам ввода/вывода
- •Побитовый доступ к регистрам ввода/вывода
- •Доступ к eeprom-памяти
- •Использование прерываний
- •Организация памяти sram
Переменные
В отличие от констант переменные во время выполнения программы могут множество раз изменять свои значения.
Переменные могут быть глобальными или локальными.
Глобальные переменные — это переменные, доступные во всех функциях программы. Если глобальные переменные специально не инициализированы, то при запуске программы они автоматически устанавливаются в 0.
Локальные переменные — это переменные, доступные только в функциях, где они объявлены. Локальные переменные при вызове функции автоматически не инициализируются.
Синтаксис объявления переменных:
[<место хранения>] определение типа> <идентификатор>;
Пример:
/* Объявление глобальных переменных */
long х;
char у;
/* Инициализация глобальных переменных */
Х=10;
/* Объявление с одновременной инициализацией глобальных переменных */
int c=0xfa;
void main(void) /* Объявление локальных переменных,
{
int а;
long b;
}
bit <идентификатор>;
Распределение памяти для битовых переменных осуществляется в порядке объявления, начиная с бита 0 регистра R2, затем бит 1 регистраR2 и так далее в порядке возрастания. Максимум можно объявить 104 битовых переменных.
Пример:
/* Битовые переменные */
bit bit_varl=l; // Объявление и инициализация битовой переменной bit_varl, которая будет храниться в бите 0 регистра R2
bit bit_var2; // Объявление битовой переменной bit_var2, которая будет храниться в бите 1 регистра R2
В выражениях битовые переменные автоматически переводятся в unsignedchar(беззнаковые символьные).
Массивы
Переменные могут быть сгруппированы в массивы.
Массивы — это группа элементов одинакового типа (double,float,intи т. п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве.
Синтаксис объявления массивов:
[<модификатор места хранения;>] <тип> идентификатор массива> [<константное_ выражение;>] ;
Компилятор поддерживает многомерные массивы, которые могут иметь вплоть до 8 измерений. Многомерные массивы формализуются списком константных выражений, следующих за идентификатором массива, причём каждое константное выражение заключается в свои квадратные скобки. Каждое константное выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных выражения, трехмерного — три и т. д.
Пример:
int loc_array2[2][2] = {{4,9}, {7,1}}; // Объявление и инициализация целочисленного локального многомерного массива 1ос_аггау2
Типы данных
Все типы данных, поддерживаемые компилятором Си, их размеры и диапазоны их возможных значений приведены в Табл. 3.
Табл. 3 – Типы данных компилятора
|
Тип |
Размер (Биты) |
Диапазон |
|
bit (бит) |
1 |
0, 1 |
|
char (символ) |
8 |
-128...127 |
|
unsigned char (символ без знака) |
8 |
0...255 |
|
signed char (символ со знаком) |
8 |
-128...127 |
|
int (целое) |
16 |
-32768...32767 |
|
short int (короткое целое) |
16 |
-32768...32767 |
|
unsigned int (целое без знака) |
16 |
0...65535 |
|
signed int (целое со знаком) |
16 |
-32768...32767 |
|
long int (длинное целое) |
32 |
2147483648...2147483647 |
|
unsigned long int (длинное целое без знака) |
32 |
0...4294967295 |
|
signed long int (длинное целое со знаком) |
32 |
-2147483648...2147483647 |
|
float (с плавающей точкой) |
32 |
+ 1.175е-38.. +3.402е38 |
|
double (двойное) |
32 |
±1.175е-38...±3.402е38 |
Тип данных bit(бит) поддерживается только для глобальных переменных.
Все переменные должны быть описаны до их использования. Описание задаёт тип, за которым следует список одной или более переменной этого типа.
Пример:
int a, b; // Объявление переменных а и b как целых
char с; // Объявление переменной с как символьной
Если указано ключевое слово unsigned, т. е. число беззнаковое, то старший бит интерпретируется как часть числа. При отсутствии ключевого слова unsigned переменная считается знаковой.
Пример:
signed char х, а; // Объявление переменных х и а как символьных со знаком
unsigned char у, b; // Объявление переменных у и b как символьных без знака
