
- •Основы языка си для микроконтроллеров avr
- •1. Основы языка Си для микроконтроллеров avr
- •Препроцессор языка Cи его команды
- •Директива #include
- •Директивы #define, #undef
- •Директивы #if, #ifdef, #ifndef, #else и #endif
- •Встроенные макросы
- •Директива #line
- •Директива #error
- •Директивы #asmи #endasm
- •Зарезервированные ключевые слова
- •Идентификаторы
- •Комментарии
- •Константы
- •Переменные
- •Массивы
- •Типы данных
- •Операнды и операции
- •Унарные операции
- •Бинарные операции
- •Приоритеты операций и порядок вычислений
- •Операторы
- •If-else
- •Оператор for
- •Do-while
- •Continue
- •Оператор-выражение
- •Пустой оператор
- •Составной оператор
- •Функции
- •Указатели
- •Доступ к регистрам ввода/вывода
- •Побитовый доступ к регистрам ввода/вывода
- •Доступ к eeprom-памяти
- •Использование прерываний
- •Организация памяти sram
Приоритеты операций и порядок вычислений
В языке Си операции с высшими приоритетами вычисляются первыми. Наивысшим является приоритет, равный 1. Приоритеты и порядок операций приведены в Табл. 6.
Табл. 6 – Приоритеты операций и порядок вычислений
Приоритет |
Типы операции |
Знак операции |
Порядок выполнения |
1 |
Выражение |
0 [] -> |
Справа налево |
2 |
Унарные |
~! * & ++ sizeof type (приведение типов) |
Слева направо |
3 |
Мультипликативные |
* / % |
Слева направо |
4 |
Аддитивные |
+ |
Слева направо |
5 |
Сдвиг |
« » |
Слева направо |
6 |
Отношение |
< > <= >= |
Слева направо |
7 |
Отношение (равенство) |
!= |
Слева направо |
8 |
Побитное И |
& |
Слева направо |
9 |
Побитное исключающее ИЛИ |
|
Слева направо |
10 |
Побитное ИЛИ |
1 |
Слева направо |
11 |
Логическое И |
&& |
Слева направо |
12 |
Логическое ИЛИ |
II |
Слева направо |
13 |
Условная |
|
Слева направо |
14 |
Простое и составное присваивание |
* — /= %= += &= 1= »= «= |
Справа налево |
15 |
Последовательное вычисление |
|
Слева направо |
Пример:
/* Приоритеты операций и порядок вычислений */
unsigned char х= 0b11110000; Объявляем и инициализируем
// беззнаковый байт х unsigned char у = Ob00111100;
// Объявляем беззнаковый байт у
у&=~х|ОхАА;
/* Первой выполняется операция побитового логического отрицания (~) как имеющая самый высокий приоритет. После её выполнения все 1 в переменной х заменятся на 0, а 0 - на 1 (см. 9.1 Унарные операции). Затем выполняется операция побитного ИЛИ (I) полученного значения (Ob00001111) с числом ОхАА=Оb10101010. При этом каждый бит первого операнда сравнивается с соответствующим битом второго операнда. Если любой (или оба) из сравниваемых битов равен 1, то соответствующий бит результата устанавливается в 1, в противном случае - в 0 (см. Бинарные операции). Последней выполняется операция побитного ИЛИ с присваиванием (&=) значения у и результата предыдущих операций (Оb10101111). При этом каждый бит первого операнда сравнивается с соответствующим битом второго операнда. Если оба сравниваемых бита 1, то соответствующий бит результата устанавливается в 1, в противном случае - в 0 (см. Бинарные операции). Полученное значение (Оb00101100) присваивается переменной у. Результат: у=0b00101100 */
Операторы
Порядок выполнения программы задают управляющие операторы.
Все операторы языка Си, кроме составных операторов, заканчиваются точкой с запятой (;), но в CodeVisionAVRдопускается и после составного оператора ставить точку с запятой.
Любой оператор в программе может быть обозначен меткой, состоящей из имени и следующего за ним двоеточия.
Все операторы языка Си можно условно разделить на несколько категорий (см. Табл. 7)
Табл. 7 – Операторы языка Си
Категория |
Оператор |
Условные операторы |
if— else |
switch | |
Операторы цикла |
for |
while | |
do while | |
Операторы перехода |
break |
continue | |
return | |
goto | |
Другие операторы |
Оператор-выражение |
Пустой оператор | |
Составной оператор |