- •Основы языка си для микроконтроллеров avr
- •1. Основы языка Си для микроконтроллеров avr
- •Препроцессор языка Cи его команды
- •Директива #include
- •Директивы #define, #undef
- •Директивы #if, #ifdef, #ifndef, #else и #endif
- •Встроенные макросы
- •Директива #line
- •Директива #error
- •Директивы #asmи #endasm
- •Зарезервированные ключевые слова
- •Идентификаторы
- •Комментарии
- •Константы
- •Переменные
- •Массивы
- •Типы данных
- •Операнды и операции
- •Унарные операции
- •Бинарные операции
- •Приоритеты операций и порядок вычислений
- •Операторы
- •If-else
- •Оператор for
- •Do-while
- •Continue
- •Оператор-выражение
- •Пустой оператор
- •Составной оператор
- •Функции
- •Указатели
- •Доступ к регистрам ввода/вывода
- •Побитовый доступ к регистрам ввода/вывода
- •Доступ к eeprom-памяти
- •Использование прерываний
- •Организация памяти sram
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
МОРСКОЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Е. В. Коротицкий, Ю. Е. Коротицкая
Основы языка си для микроконтроллеров avr
Учебное пособие
Санкт-Петербург
2011
1. Основы языка Си для микроконтроллеров avr
Универсальный язык С был разработан как инструмент для написания операционной среды UNIX.
Язык С поддерживает процедурно-ориентированную парадигму программирования, т.е. парадигма – взаимосвязанный набор процедур.
Для языка Си характерны лаконичность, современный набор конструкций управления потоком выполнения, структур данных и обширный набор операций.
Препроцессор языка Cи его команды
Препроцессор (макропроцессор) — это составная часть языка Си, которая обрабатывает исходный текст программы до того, как он пройдет через компилятор. Препроцессор читает строки текста и выполняет действия, определяемые командными строками. Если первым символом в строке, отличным от пробела, является символ #, то такая строка рассматривается препроцессором как командная. Командные строки называются директивами препроцессора.
Препроцессор компилятора CodeVisionAVRимеет несколько директив. В Табл. 1 даётся их краткое описание.
Табл. 1 –Директивы препроцессора компилятора CodeVisionAVR
Директива |
Назначение |
#include |
Используется для включения в программу другого файла |
#define |
Используется для замены одних лексических единиц языка Си на другие, а также для генерации макросов |
#undef |
Используется для отмены действия директивы #define |
#if |
Используются для условной компиляции |
Sifdef | |
#ifndef | |
#else | |
#endif | |
#line |
Используется для изменения встроенных макросов _LINE_и_FILE_ |
#error |
Позволяет остановить компиляцию и отобразить сообщение об ошибках |
#asm |
Используются для включения в исходную программу ассемблерного кода |
#pragma |
Разрешает специальные директивы компилятора |
ВСЕ директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой НЕ СТАВИТСЯ.
Директива #include
Пример:
Директива #include имеет две синтаксические формы:
#include "имя_файла" и #include <имя_файла>
Имя_файла состоит из имени файла.
Директива #include широко используется для включения в программу так называемых заголовочных файлов (файлы с расширением.h), содержащих определения периферийных устройств и векторов прерываний используемого микроконтроллера, прототипы библиотечных функций, прототипы функций, определённых пользователем, и т. д.
#include "имя_файла.h"
Директивы #define, #undef
Директива #define служит для замены часто использующихся одних лексических единиц языка Си (констант, ключевых слов, операторов или выражений) на другие, так называемыеидентификаторы. Идентификаторы, заменяющие текстовые или числовые константы, называютименованными константами. Идентификаторы, заменяющие фрагменты программ, называютмакроопределениями, причём макроопределения могут иметь аргументы.
Директива #define имеет две синтаксические формы:
#define идентификатор текст
#define идентификатор (список параметров) текст
Перед компиляцией программы препроцессор в соответствии с директивой #define заменит все идентификаторы, встречающиеся в программе, на соответствующий им текст.
Пример:
#define А 15 #define В (А+20) // Эти директивы заменят в тексте программы
каждый идентификатор А на число 15, а каждый идентификатор В на выражение (15+20) вместе с окружающими его скобками.
Пример:
#define X(a,b,c) ((а)*(b)-(с)) // Препроцессор в соответствии с этой директивой заменит фрагмент Y=X(k+m,k-m,n); на фрагмент
Y=((k+m)*(k-m)-(n))