Урок №1. Введение (17 минут)
- Из этого видео Вы узнаете особенности курса. Так же получите несколько полезных советов, связанных с изучением видеокурса, следуя которым, вы сэкономите свое время и качественнее усвоите материал.
Урок №2. История языка С (36 минут)
- Эволюция языков программирования: от машинных кодов и ассемблера до высокоуровневых языков. Особенности применения разных языков, их преимущества и недостатки. История создания и развития языка С. Основные причины популярности. Стандарты языка С.
Урок №3. Язык С для микроконтроллеров (22 минуты)
- Понятие встраиваемой системы. Отличия в архитектуре персональных компьютеров от архитектуры микроконтроллеров. Особенности программирования на языке С под разные архитектуры. Компиляторы и среды разработки. Отличия в компиляторах. Интегрированная среда Atmel Studio и компилятор GCC.
Среда разработки Atmel Studio
Урок №4.1 Установка среды программирования (17 минут)
- Установка Atmel Studio 6.2. Стартовое окно Atmel Studio. Начальные настройки интерфейса. Открытие нескольких окон среды.
- Открытие проектов из дополнительных материалов.
- Пример переноса проекта созданного в Atmel Studio в среду AVR Studio
Урок №4.2 Создание проекта (33 минуты)
- Пример создания нового проекта в Atmel Studio. Различные типы проектов. Краткий обзор основных настроек Atmel Studio.
- Краткий обзор настроек интерфейса. Свойства проекта. Обзор пунктов меню среды. Окно Solution Explorer. Краткий обзор элементов панели инструментов. Файлы проекта.Режимы Debug и Release. Настройки компилятора.
Урок №4.3 Работа со встроенной утилитой программирования (38 минут)
- Обзор возможностей встроенной программы для взаимодействия с программаторами. Настройка частоты прогамматора. Считывание и запись калибровочных коэффициентов. Автоматическая очистка и верификация FLASH - памяти. Считывание памяти. Окно настройки FUSE бит. Понятие загрузчика. Изменение вектора начального сброса. Встроенный детектор напряжения. Биты блокировки доступа к Flash и EEPROM памяти микроконтроллера. ELF формат прошивки.
Урок №4.4 Некоторые полезные функции Atmel Studio (16 минут)
- Подробный обзор полезных функций Atmel Studio. Функции стартовой страницы. Изменение цвета и шрифтов текстового редактора. Свойства проекта. Настройка оптимизации компилятора. Особенности отладки программ при включенной оптимизации. Настройка создаваемых файлов.
- Запуск программы на симуляцию. Предупреждения и ошибки компиляции.
- Автоматическая перепрошика после компиляции.
Урок №4.5 Полезные функции текстового редактора (37 минут)
- Возможности текстового редактора. Полезные сочетания клавиш. Возможности среды Atmel Studio. Горячие клавиши и функции текстового редактора, которые значительно упрощают и ускоряют работу при написании программ. Многострочное редактирование.
- Работа с снипетами. Создание заготовок кода. Окна поиска и замены.
Урок №4.6 Отладка программ в симуляторе (58 минут)
- Запуск отладки. Указатель положения отладчика. Переход в тело функции, пропуск отладки функции, досрочный выход. Сброс программы. Выполнение до курсора. Пауза симуляции. Окно дизассемблера. Окна различных типов памяти микроконтроллера. Секции загрузчика FLASH-памяти. Окно процессор. Время выполнения команд. Регистры ввода-вывода. Инструмент отслеживания переменных Data Tips. Точки останова. Задание программных условий точек останова. Программные закладки.
Урок №5. Создание первого проекта (20 минут)
- Основные этапы и правила создания проекта. Заготовка проекта. Однострочные и многострочные комментарии. Горячие клавиши для комментирования. Подключение файла описаний. Назначение файла описаний. Подключение к проекту сторонних файлов. Назначение функции main. Возврат значения из функции. Выход из функции main.
- Разбор ассемблерного кода пустой программы.
Урок №6. Константы (15 минут)
- Директива препроцессора define. Определение констант и имен. Файл описаний микроконтроллера. Заголовочные файлы, включаемые в проект. Синтаксис языка Си.
Урок №7. Переменные (40 минут)
- Понятие переменных в языке Си. Определение и объявление переменных. Типы данных в языке Си. Размер типов данных в памяти. Положительные и отрицательные числа. Хранение целых и дробных чисел. Тип данных char и его особенности. Правила задания имен для переменных. Задание пользовательских имен типов данных. Пользовательские типы заданные в файле stdint.h. Задание типа константы. Глобальные и локальные переменные. Определение переменных и задание начальных значений. Оптимизация переменных. Квалификатор volatile. Приведение типов переменных.
Урок №8. Арифметические и поразрядные операции (27 минут)
- Арифметические операции: сложение, вычитание, умножение, деление, остаток от деления. Сокращенная запись арифметических операций. Операции инкремента и декремента (префиксные и постфиксные формы операций). Поразрядные операции: поразрядное умножение, сложение, исключающее или, инверсия, сдвиг влево, сдвиг вправо. Сокращенная запись поразрядных операций. Переполнение переменных. Приведение типов переменных в операциях. Инверсия разрядов портов микроконтроллера.
Урок №9. Логические операции (19 минут)
- Логические операции: умножение, сложение, инверсия.
- Операторы сравнения. Интерпретация результатов операций.
- Сложные комбинации логических операций и других типов операций
- Операции присваивания и логические операции
Урок №10. Оператор цикла while (15 минут)
- Оператор цикла while. Оформление конструкций циклов.
- Задение условия выполнения цикла. Бесконечные циклы. Пустые циклы.
- Префиксные и постфиксные операции в цикле. Оператор досрочного завершения цикла.
- Оператор досрочного завершения текущей итерации цикла.
Урок №11. Оператор цикла do while (5 минут)
- Цикл do while
- Задание условия. Однократное выполнение тела цикла.
- Оператор досрочного завершения цикла.
- Оператор досрочного завершения текущей итерации цикла.
Урок №12. Оператор цикла for (16 минут)
- Задание условий начала и продолжения цикла. Задание условий в теле цикла. Выполение тела цикла. Создание и использование локальной переменной в цикле. Эквивалентный цикл while. Досрочный выход из цикла. Досрочное завершение текущей итерации цикла
Урок №13. Оператор ветвления if else (15 минут)
- Разные типы конструкций с использованием операторов if else
- Объединение нескольких условий в конструкции if.
- Конструкция для выбора нескольких условий if-else-if
Урок №14. Условная операция (11 минут)
- Условная или тернарная операция.
- Несколько вариантов записей условной операции.
- Примеры использования условной операции.
- Исполнение различных операций в условной операции.
- Возврат из функции с использованием условной операции.
Урок №15. Оператор множественного выбора switch (15 минут)
- Описание конструкции оператора switch case.
- Завершение конструкции оператором break.
- Аналог конструкции в виде if-else-if.
- Выполнение нескольких операторов в конструкции switch case.
- Задание одинаковых действий для нескольких значений.
Урок №16. Функции в языке Си (часть 1) (32 минуты)
- Понятие функций. Преимущества и недостатки.
- Оформление функций в языке Си. Возвращаемые и принимаемые значения. Досрочное завершение функций. Функция main( ). Программная задержка с использованием функций. Глобальные и локальные переменные в функциях. Вывод цифр на семисегментный индикатор.
Урок №17. Функции в языке Си (часть 2) (31 минута)
- Понятие прототипов функций.
- Статические переменные и их приминение в функциях
- Автоматические переменные в функциях.
- Создание и инициализация переменных в функциях.
- Пример использования функции для обработки матричной клавиатуры
Урок №18. Массивы (часть 1) (14 минут)
- Введение в понятие массивов. Инициализация массивов.
- Нумерация элементов массива. Понятие размера массива. Считывание и запись элементов массива. Изменение массивов. Копирование массивов
Урок №19. Массивы (часть 2) (36 минут)
- Инициализация массива набором констант. Инициализация отдельных элементов. Передача массива в функцию. Сортировка массива. Выход за границы массива при чтении и записи. Определение размера переменной в памяти. Определение размера массива и количества элементов. Многомерные массивы. Инициализация многомерных массивов. Указание неполных списков инициализации. Доступ к многомерным массивам при помощи одномерных
Урок №20. Строки (23 минуты)
- Понятие строк в языке Си. Связь строк и символов. Управляющие символы.
- Признак конца строки. Передача символьной строки в функцию. Функция вывода строк на терминальную программу ПК. Отличие символьного массива и строки символов. Символы возврата каретки и переноса строки.
- Запись длинной строки символов с разбиением на несколько строк.
- Вывод на терминальную программу ПК строк с кириллическими символами.
Урок №21. Макросы (28 минут)
- Понятие макроопределений в языке Си, их преимущества и недостатки. Ограничения при использовании макросов. Некорректное определение макросов и последствия их использования в программе. Пример макросов для перевода символов в верхний и нижний регистр. Пример макросов для установки и сброса выводов портов. Запись макросов в несколько строк. Отличия функций и макросов. Понятие встроенной функции.
Урок №22. Условная компиляция (17 минут)
- Понятие условной компиляции. Директивы препроцессора. Применение условной компиляции. Использование директив определения/не определения идентификаторов. Комментирование участков кода при помощи условной компиляции. Директивы условной компиляции с несколькими условиями. Специальные директивы остановки компиляции с ошибкой и предупреждением.
Урок №23. Модульное программирование. Теория (23 минуты)
- Понятие модульного программирования. Преимущества разбиения на отдельные модули. Заголовочный файл и файл с исполняемым кодом. Построение проекта из нескольких модулей. Понятие библиотеки. Компиляция отдельных модулей. Этапы препроцессинга, компиляции, линковки и создания загрузочного модуля. Создание объектных файлов. Линковка программы.
Урок №24. Создание библиотек и подключение заголовочных файлов (42 минуты)
- Практика разбиения проекта на отдельные модули. Работа директивы #include. Создание заголовочных файлов. Создание пользовательских файлов с кодом Си. Включение заголовочных файлов в проект. Подключение к проекту пользовательских файлов. Назначение прототипов функций. Правила использования заголовочных файлов.
- Заголовочный файл головного модуля.
Урок №25. Спецификатор extern (41 минута)
- Понятие спецификатора класса памяти extern и внешней переменной.
- Правила использования внешних переменных. Глобальное переменные в модулях программы. Доступ к переменным в различных модулях программы. Понятие внешних функций.
Указатели
Урок №26.1 Адресация памяти (52 минуты)
- Адресация переменных в ОЗУ микроконтроллера. Размещение памяти под переменные различных типов. Важное правило выбора разрядности переменных в программе. Типы памяти в микроконтроллере. Размещение переменных и массивов различных типов в ОЗУ микроконтроллера. Примеры использования памяти микроконтроллера при выполнении различных операций. Оператор взятия адреса переменных. Важное правило размещения элементов массива в памяти. Различия в расположении локальных и глобальных переменных в памяти микроконтроллера.
Урок №26.2 Понятие указателей (38 минут)
- Понятие переменных-указателей в языке Си. Создание указателей в программе. Указатели на различные типы переменных. Запись адреса в указатель. Операция разыменование указателя. Доступ к переменным различных типов через указатели. Использование указателей в функциях. Передача адресов переменных в функции.
Урок №26.3 Сложные примеры использования указателей (часть 1) (28 минут)
- Стандартные и нестандартные методы использования указателей в языке Си. Считывание и запись переменных через указатели на различные типы переменных. Выход за пределы адресов переменных
- Несовместимые типы переменных и указателей. Побайтовый доступ к переменным через указатели. Приведение к типу указателя. Понятие адресной арифметики. Изменение адресов при инкременте указателя в зависимости от его типа. Сравнение указателей.
Урок №26.4 Сложные примеры использования указателей (часть 2) (46 минут)
- Доступ к отдельным байтам переменной с использованием операции приведения к указателю. Понятие нетипизированного указателя.
- Применение нетипизированного указателя. Приведение нетипизированного указателя к переменным разных типов. Запись в указатель прпоизвольного адреса. Считывание памяти по произвольному адресу. Запись памяти по произвольному адресу.
- Копирование памяти по блокам. Понятие константы NULL. Инициализация указателей значением NULL. Указатели на указатели.
Урок №26.5 Указатели и регистры ввода-вывода (13 минут)
- Доступ к регистрам ввода-вывода через указатели. Адреса регистров ввода-вывода. Разбор встроенных макросов для доступа к регистрам ввода-вывода. Обращение к регистрам ввода-вывода как к ячейкам ОЗУ. Приведение адреса к указателю на тип данных unsigned char.
Урок №26.6 Указатели и функции (19 минут)
- Передача адресов в функции и возврат адреса из функций.
- Пример доступа к переменным через разыменование локальных указателей в функциях. Пример возврата из функции адреса переменной.
Урок №26.7 Указатели и массивы (19 минут)
- Связь между массивами и указателями в языке Си. Имя массива как адрес начала массива в памяти. Доступ к элементам массива при помощи указателя. Разыменование имени массива. Передача адреса массива в функцию.
Урок №26.8 Указатели и строки (26 минут)
- Доступ к строкам через указатель. Размещение строк в памяти.
- Отличия в использовании массивов, указателей и директивы #define для хранения адресов начала строк в памяти. Использование указателей и массивов в функциях для обработки строки посимвольно.
- Передача в функцию строк при помощи массивов, указателей и директивы #define. Передача в функцию адреса размещения строки с произвольного символа. Изменение строк. Защита от изменения строк.
Урок №26.9 Массивы указателей (24 минуты)
- Понятие массивов указателей. Инициализация массивов указателей.
- Применение массивов указателей и размещение в памяти элементов массива. Массивы строк. Расположение адресов начала строк в оперативной памяти. Использование массивов указателей для печати строк. Передача в функцию массива указателей
Урок №26.10 Указатели на функции (24 минут)
- Понятие указателей на функции. Адреса расположения функции в программной памяти. Создание указателя на функции. Пример вызова функции через указатель. Создание и использование массива указателей на функции. Использование указателей на функции для перехода по произвольному адресу программной памяти.
Урок №26.11. Примеры использования указателей на функции (19 минут)
- Практические примеры использования указателей на функции. Использование указателей на функцию для перехода в секцию загрузчика. Понятие загрузчика. Расположение программы-загрузчика в программной памяти. Понятие конечных автоматов. Создание конечных автоматов с использованием указателей на функции.
Структуры
Урок №27.1 Понятие структур в языке С (20 минут)
- Введение в понятие структурных типов данных в языке Си. Применение структур. Описание структуры. Создание переменной структурного типа.
- Поля структуры. Инициализация переменной структурного типа. Расположение переменных структурного типа в памяти. Доступ к полям структуры. Основные операции с полями структур. Размер переменной структурного типа.
Урок №27.2 Сложные примеры использования структур (13 минут)
- Использование описания структур в заголовочных файлах. Задание пользовательского типа данных для создания переменных структурного типа. Совмещение описания структуры и создания переменной структурного типа. Инициализация переменных структурного типа.
- Создание и использование локальных переменных структурного типа.
- Использование в полях структур перменных структурного типа.
Урок №27.3 Массивы структур и битовые поля (17 минут)
- Понятие массива структур. Работа со структурами как элементами массива. Понятие битовых полей. Примеры в которых целесообразно использовать битовые поля. Примеры использования битовых полей.
- Битовые поля в памяти микроконтроллера.
Урок №27.4 Указатели на структуры (17 минут)
- Понятие указателей на структуры. Создание указателей на переменные структурного типа. Запись адреса и разыменование указателя.
- Специальная операция доступа к полям структуры через указатели.
- Считывание элементов массива через указатель на структуру.
Урок №27.5 Структуры и функции (16 минут)
- Передача переменных структурного типа в функции. Возврат переменных структурного типа из функций. Передача указателей на переменные структурного типа в функции. Возврат указателей на переменные структурного типа из функций. Изменение полей структуры при помощи указателей. Передача полей структуры в функцию. Возврат полей структуры из функции. Пример некорректного действия по возврату адреса локальной переменной структурного типа.
Урок №28. Перечисления (13 минут)
- Понятие перечислений в языке С. Примеры их использования. Преимущество использования перечислений для создания именованных констант. Инициализация первого элемента в списке констант. Задание произвольных значений в середине списка. Создание нового типа данных перечисление. Создание переменных типа перечисление.
Урок №29. Константы в программной памяти (47 минут)
- Размещение констант в программной памяти микроконтроллера.
- Проблема размещения и считывания констант из программной памяти.
- Понятие Гарвардской и Фон Неймоновской архитектуры. Специальные макросы для сохранения констант в программной памяти и считывания констант из программной памяти. Адреса расположения констант в программной памяти. Работа с массивами и строками в программной памяти. Массивы строк в программной памяти.
Урок №30. Прерывания (40 минут)
- Обработка прерываний в языке Си. Подключение библиотеки обработки прерывания. Использование специальных макросов. Расположение векторов прерываний. Оформление процедур обработки прерывания. Специальные атрибуты макросов обработки прерывания.
- Понятия кодов пролога и эпилога. Отключение генерации кода пролога и эпилога. Глобальное запрещение и разрешение прерываний. Важное правило использования глобальных переменных в процедурах обработки прерываний. Разрешение прерываний в теле процедуры обработки прерывания. Пример выполнения прерываний для которых не прописан индивидуальный обработчик.
Урок №31. Оператор goto (20 минут)
- Оператор безусловного перехода GOTO. Применение оператора. Понятие метки перехода. Основные правила использования оператора goto. Случаи оправдывающие использование оператора goto
- Другие операторы безусловного перехода. Конструкции позволяющие заменить оператор goto.
Встроенные библиотеки
Урок №32.1 Программная задержка (16 минут)
Пустые программные циклы. Подключение заголовочного файла библиотеки программной задержки. Константа тактовой частоты. Основные правила использования функций библиотек. Факторы влияющие на точность программной задержки. Задержки в милисекундах и микросекундах. Некорректные величины задержек. Функции задержки в ассемблерных командах.
Урок №32.2 Математические операции (23 минуты)
- Специальные математические функции. Подключение математической библиотеки. Часто используемые математические константы. Возведение числа в степень, вычисление квадратного корня. Тригонометрические функции. Вычисление натурального и десятичного логарифмов. Функция округления до целых значений.
Урок №32.3 Атомарные операции (33 минуты)
- Понятие атомарных операций. Пример некорректного выполнения программы при обращении к переменной из прерывания. Подробный разбор в окне дизассемблера причин неправильной работы программы.
- Варианты защиты операций с переменными в случае использования прерываний. Специальные макросы для атомарных и неатомарных операций.
Выделение памяти
Урок №32.4.1 Введение (8 минут)
- Понятие статического и динамического распределения памяти.
- Преимущества и недостатки статического и динамического выделения памяти.
- Ситуации в которых используется динамическое выделение памяти.
Урок №32.4.2 Массив с переменным размером (10 минут)
- Понятие массивов с переменным размером.
- Практическое применение массивов с переменным размером.
- Пример программы с массивом создаваемым в процессе выполнения.
- Правила использования массивов переменной длины.
- Недостатки массивов переменной длины.
Урок №32.4.3 Специальные функции выделения памяти (33 минуты)
- Динамическое выделение памяти при помощи специальных средств языка С. Подробный разбор основных функций malloc(), calloc(), realloc(), free(). Важные правила использования выделенной памяти.
- Сохранение информации о размере выделенного сегмента. Пример записи и чтения выделенного сегмента памяти. Понятие сегментации памяти. Возвращаемые значения функций выделения памяти. Изменение размера выделенной памяти.