Из этого видео Вы узнаете особенности курса. Так же получите несколько полезных советов, связанных с изучением видеокурса, следуя которым, вы сэкономите свое время и качественнее усвоите материал.
Эволюция языков программирования: от машинных кодов и ассемблера до высокоуровневых языков. Особенности применения разных языков, их преимущества и недостатки. История создания и развития языка С. Основные причины популярности. Стандарты языка С.
Понятие встраиваемой системы. Отличия в архитектуре персональных компьютеров от архитектуры микроконтроллеров. Особенности программирования на языке С под разные архитектуры. Компиляторы и среды разработки. Отличия в компиляторах. Интегрированная среда Atmel Studio и компилятор GCC.
Установка Atmel Studio 6.2. Стартовое окно Atmel Studio. Начальные настройки интерфейса. Открытие нескольких окон среды.Открытие проектов из дополнительных материалов.Пример переноса проекта созданного в Atmel Studio в среду AVR Studio
Пример создания нового проекта в Atmel Studio. Различные типы проектов. Краткий обзор основных настроек Atmel Studio.Краткий обзор настроек интерфейса. Свойства проекта. Обзор пунктов меню среды. Окно Solution Explorer. Краткий обзор элементов панели инструментов. Файлы проекта.Режимы Debug и Release. Настройки компилятора.
Обзор возможностей встроенной программы для взаимодействия с программаторами. Настройка частоты прогамматора. Считывание и запись калибровочных коэффициентов. Автоматическая очистка и верификация FLASH - памяти. Считывание памяти. Окно настройки FUSE бит. Понятие загрузчика. Изменение вектора начального сброса. Встроенный детектор напряжения. Биты блокировки доступа к Flash и EEPROM памяти микроконтроллера. ELF формат прошивки.
Подробный обзор полезных функций Atmel Studio. Функции стартовой страницы. Изменение цвета и шрифтов текстового редактора. Свойства проекта. Настройка оптимизации компилятора. Особенности отладки программ при включенной оптимизации. Настройка создаваемых файлов.Запуск программы на симуляцию. Предупреждения и ошибки компиляции.Автоматическая перепрошика после компиляции.
Возможности текстового редактора. Полезные сочетания клавиш. Возможности среды Atmel Studio. Горячие клавиши и функции текстового редактора, которые значительно упрощают и ускоряют работу при написании программ. Многострочное редактирование.Работа с снипетами. Создание заготовок кода. Окна поиска и замены.
Запуск отладки. Указатель положения отладчика. Переход в тело функции, пропуск отладки функции, досрочный выход. Сброс программы. Выполнение до курсора. Пауза симуляции. Окно дизассемблера. Окна различных типов памяти микроконтроллера. Секции загрузчика FLASH-памяти. Окно процессор. Время выполнения команд. Регистры ввода-вывода. Инструмент отслеживания переменных Data Tips. Точки останова. Задание программных условий точек останова. Программные закладки.
Основные этапы и правила создания проекта. Заготовка проекта. Однострочные и многострочные комментарии. Горячие клавиши для комментирования. Подключение файла описаний. Назначение файла описаний. Подключение к проекту сторонних файлов. Назначение функции main. Возврат значения из функции. Выход из функции main.Разбор ассемблерного кода пустой программы.
Директива препроцессора define. Определение констант и имен. Файл описаний микроконтроллера. Заголовочные файлы, включаемые в проект. Синтаксис языка Си.
Понятие переменных в языке Си. Определение и объявление переменных. Типы данных в языке Си. Размер типов данных в памяти. Положительные и отрицательные числа. Хранение целых и дробных чисел. Тип данных char и его особенности. Правила задания имен для переменных. Задание пользовательских имен типов данных. Пользовательские типы заданные в файле stdint.h. Задание типа константы. Глобальные и локальные переменные. Определение переменных и задание начальных значений. Оптимизация переменных. Квалификатор volatile. Приведение типов переменных.
Арифметические операции: сложение, вычитание, умножение, деление, остаток от деления. Сокращенная запись арифметических операций. Операции инкремента и декремента (префиксные и постфиксные формы операций). Поразрядные операции: поразрядное умножение, сложение, исключающее или, инверсия, сдвиг влево, сдвиг вправо. Сокращенная запись поразрядных операций. Переполнение переменных. Приведение типов переменных в операциях. Инверсия разрядов портов микроконтроллера.
Логические операции: умножение, сложение, инверсия.Операторы сравнения. Интерпретация результатов операций.Сложные комбинации логических операций и других типов операцийОперации присваивания и логические операции
Оператор цикла while. Оформление конструкций циклов.Задение условия выполнения цикла. Бесконечные циклы. Пустые циклы.Префиксные и постфиксные операции в цикле. Оператор досрочного завершения цикла.Оператор досрочного завершения текущей итерации цикла.
Цикл do while. Задание условия. Однократное выполнение тела цикла.Оператор досрочного завершения цикла.Оператор досрочного завершения текущей итерации цикла.
Задание условий начала и продолжения цикла. Задание условий в теле цикла. Выполение тела цикла. Создание и использование локальной переменной в цикле. Эквивалентный цикл while. Досрочный выход из цикла. Досрочное завершение текущей итерации цикла
Разные типы конструкций с использованием операторов if elseОбъединение нескольких условий в конструкции if. Конструкция для выбора нескольких условий if-else-if
Условная или тернарная операция.Несколько вариантов записей условной операции.Примеры использования условной операции.Исполнение различных операций в условной операции.Возврат из функции с использованием условной операции.
Описание конструкции оператора switch case. Завершение конструкции оператором break. Аналог конструкции в виде if-else-if. Выполнение нескольких операторов в конструкции switch case. Задание одинаковых действий для нескольких значений.
Понятие функций. Преимущества и недостатки.Оформление функций в языке Си. Возвращаемые и принимаемые значения. Досрочное завершение функций. Функция main( ). Программная задержка с использованием функций. Глобальные и локальные переменные в функциях. Вывод цифр на семисегментный индикатор.
Понятие прототипов функций.
Статические переменные и их приминение в функциях
Автоматические переменные в функциях.
Создание и инициализация переменных в функциях.
Пример использования функции для обработки матричной клавиатуры
Введение в понятие массивов.
Инициализация массивов.
Нумерация элементов массива. Понятие размера массива. Считывание и запись элементов массива. Изменение массивов. Копирование массивов
Инициализация массива набором констант. Инициализация отдельных элементов. Передача массива в функцию. Сортировка массива. Выход за границы массива при чтении и записи. Определение размера переменной в памяти. Определение размера массива и количества элементов. Многомерные массивы. Инициализация многомерных массивов. Указание неполных списков инициализации. Доступ к многомерным массивам при помощи одномерных
Понятие строк в языке Си. Связь строк и символов. Управляющие символы.Признак конца строки. Передача символьной строки в функцию. Функция вывода строк на терминальную программу ПК. Отличие символьного массива и строки символов. Символы возврата каретки и переноса строки.Запись длинной строки символов с разбиением на несколько строк.Вывод на терминальную программу ПК строк с кириллическими символами.
Понятие макроопределений в языке Си, их преимущества и недостатки. Ограничения при использовании макросов. Некорректное определение макросов и последствия их использования в программе. Пример макросов для перевода символов в верхний и нижний регистр. Пример макросов для установки и сброса выводов портов. Запись макросов в несколько строк. Отличия функций и макросов. Понятие встроенной функции.
Понятие условной компиляции. Директивы препроцессора. Применение условной компиляции. Использование директив определения/не определения идентификаторов. Комментирование участков кода при помощи условной компиляции. Директивы условной компиляции с несколькими условиями. Специальные директивы остановки компиляции с ошибкой и предупреждением.
Понятие модульного программирования. Преимущества разбиения на отдельные модули. Заголовочный файл и файл с исполняемым кодом. Построение проекта из нескольких модулей. Понятие библиотеки. Компиляция отдельных модулей. Этапы препроцессинга, компиляции, линковки и создания загрузочного модуля. Создание объектных файлов. Линковка программы.
Практика разбиения проекта на отдельные модули. Работа #include. Создание заголовочных файлов. Создание пользовательских файлов с кодом Си. Включение заголовочных файлов в проект. Подключение к проекту пользовательских файлов. Назначение прототипов функций. Правила использования заголовочных файлов.Заголовочный файл головного модуля.
Понятие спецификатора класса памяти extern и внешней переменной.Правила использования внешних переменных. Глобальное переменные в модулях программы. Доступ к переменным в различных модулях программы. Понятие внешних функций.
Адресация переменных в ОЗУ микроконтроллера. Размещение памяти под переменные различных типов. Важное правило выбора разрядности переменных в программе. Типы памяти в микроконтроллере. Размещение переменных и массивов различных типов в ОЗУ микроконтроллера. Примеры использования памяти микроконтроллера при выполнении различных операций. Оператор взятия адреса переменных. Важное правило размещения элементов массива в памяти. Различия в расположении локальных и глобальных переменных в памяти микроконтроллера.
Понятие переменных-указателей в языке Си. Создание указателей в программе. Указатели на различные типы переменных. Запись адреса в указатель. Операция разыменование указателя. Доступ к переменным различных типов через указатели. Использование указателей в функциях. Передача адресов переменных в функции.
Стандартные и нестандартные методы использования указателей в языке Си. Считывание и запись переменных через указатели на различные типы переменных. Выход за пределы адресов переменныхНесовместимые типы переменных и указателей. Побайтовый доступ к переменным через указатели. Приведение к типу указателя. Понятие адресной арифметики. Изменение адресов при инкременте указателя в зависимости от его типа. Сравнение указателей.
Доступ к отдельным байтам переменной с использованием операции приведения к указателю. Понятие нетипизированного указателя.Применение нетипизированного указателя. Приведение нетипизированного указателя к переменным разных типов. Запись в указатель прпоизвольного адреса. Считывание памяти по произвольному адресу. Запись памяти по произвольному адресу.Копирование памяти по блокам. Понятие константы NULL. Инициализация указателей значением NULL. Указатели на указатели.
Доступ к регистрам ввода-вывода через указатели. Адреса регистров ввода-вывода. Разбор встроенных макросов для доступа к регистрам ввода-вывода. Обращение к регистрам ввода-вывода как к ячейкам ОЗУ. Приведение адреса к указателю на тип данных unsigned char.
Передача адресов в функции и возврат адреса из функций.Пример доступа к переменным через разыменование локальных указателей в функциях. Пример возврата из функции адреса переменной.
Связь между массивами и указателями в языке Си. Имя массива как адрес начала массива в памяти. Доступ к элементам массива при помощи указателя. Разыменование имени массива. Передача адреса массива в функцию.
Доступ к строкам через указатель. Размещение строк в памяти.Отличия в использовании массивов, указателей и директивы #define для хранения адресов начала строк в памяти. Использование указателей и массивов в функциях для обработки строки посимвольно.Передача в функцию строк при помощи массивов, указателей и директивы #define. Передача в функцию адреса размещения строки с произвольного символа. Изменение строк. Защита от изменения строк.
Понятие массивов указателей. Инициализация массивов указателей.Применение массивов указателей и размещение в памяти элементов массива. Массивы строк. Расположение адресов начала строк в оперативной памяти. Использование массивов указателей для печати строк. Передача в функцию массива указателей
Понятие указателей на функции. Адреса расположения функции в программной памяти. Создание указателя на функции. Пример вызова функции через указатель. Создание и использование массива указателей на функции. Использование указателей на функции для перехода по произвольному адресу программной памяти.
Практические примеры использования указателей на функции. Использование указателей на функцию для перехода в секцию загрузчика. Понятие загрузчика. Расположение программы-загрузчика в программной памяти. Понятие конечных автоматов. Создание конечных автоматов с использованием указателей на функции.
Введение в понятие структурных типов данных в языке Си. Применение структур. Описание структуры. Создание переменной структурного типа.Поля структуры. Инициализация переменной структурного типа. Расположение переменных структурного типа в памяти. Доступ к полям структуры. Основные операции с полями структур. Размер переменной структурного типа.
Использование описания структур в заголовочных файлах. Задание пользовательского типа данных для создания переменных структурного типа. Совмещение описания структуры и создания переменной структурного типа. Инициализация переменных структурного типа.Создание и использование локальных переменных структурного типа.Использование в полях структур перменных структурного типа.
Понятие массива структур. Работа со структурами как элементами массива. Понятие битовых полей. Примеры в которых целесообразно использовать битовые поля. Примеры использования битовых полей.Битовые поля в памяти микроконтроллера.
Понятие указателей на структуры. Создание указателей на переменные структурного типа. Запись адреса и разыменование указателя.Специальная операция доступа к полям структуры через указатели.Считывание элементов массива через указатель на структуру.
Передача переменных структурного типа в функции. Возврат переменных структурного типа из функций. Передача указателей на переменные структурного типа в функции. Возврат указателей на переменные структурного типа из функций. Изменение полей структуры при помощи указателей. Передача полей структуры в функцию. Возврат полей структуры из функции. Пример некорректного действия по возврату адреса локальной переменной структурного типа.
Понятие перечислений в языке С. Примеры их использования. Преимущество использования перечислений для создания именованных констант. Инициализация первого элемента в списке констант. Задание произвольных значений в середине списка. Создание нового типа данных перечисление. Создание переменных типа перечисление.
Размещение констант в программной памяти микроконтроллера.Проблема размещения и считывания констант из программной памяти.Понятие Гарвардской и Фон Неймоновской архитектуры. Специальные макросы для сохранения констант в программной памяти и считывания констант из программной памяти. Адреса расположения констант в программной памяти. Работа с массивами и строками в программной памяти. Массивы строк в программной памяти.
Обработка прерываний в языке Си. Подключение библиотеки обработки прерывания. Использование специальных макросов. Расположение векторов прерываний. Оформление процедур обработки прерывания. Специальные атрибуты макросов обработки прерывания.Понятия кодов пролога и эпилога. Отключение генерации кода пролога и эпилога. Глобальное запрещение и разрешение прерываний. Важное правило использования глобальных переменных в процедурах обработки прерываний. Разрешение прерываний в теле процедуры обработки прерывания. Пример выполнения прерываний для которых не прописан индивидуальный обработчик.
Оператор безусловного перехода GOTO. Применение оператора. Понятие метки перехода. Основные правила использования оператора goto. Случаи оправдывающие использование оператора gotoДругие операторы безусловного перехода. Конструкции позволяющие заменить оператор goto.
Пустые программные циклы. Подключение заголовочного файла библиотеки программной задержки. Константа тактовой частоты. Основные правила использования функций библиотек. Факторы влияющие на точность программной задержки. Задержки в милисекундах и микросекундах. Некорректные величины задержек. Функции задержки в ассемблерных командах.
Специальные математические функции. Подключение математической библиотеки. Часто используемые математические константы. Возведение числа в степень, вычисление квадратного корня. Тригонометрические функции. Вычисление натурального и десятичного логарифмов. Функция округления до целых значений.
Понятие атомарных операций. Пример некорректного выполнения программы при обращении к переменной из прерывания. Подробный разбор в окне дизассемблера причин неправильной работы программы.Варианты защиты операций с переменными в случае использования прерываний. Специальные макросы для атомарных и неатомарных операций.
Понятие статического и динамического распределения памяти.Преимущества и недостатки статического и динамического выделения памяти.Ситуации в которых используется динамическое выделение памяти.
Понятие массивов с переменным размером.Практическое применение массивов с переменным размером.Пример программы с массивом создаваемым в процессе выполнения.Правила использования массивов переменной длины.Недостатки массивов переменной длины.
Динамическое выделение памяти при помощи специальных средств языка С. Подробный разбор основных функций malloc(), calloc(), realloc(), free(). Важные правила использования выделенной памяти.Сохранение информации о размере выделенного сегмента. Пример записи и чтения выделенного сегмента памяти. Понятие сегментации памяти. Возвращаемые значения функций выделения памяти. Изменение размера выделенной памяти.
Вы можете быть спокойны за качество и надежность программ. Потому что после изучения курса Вы будете знать не только как писать программы, но и почему нужно писать именно так и что будет с программой, если написать ее по другому. Сможете составлять более сложные программы работающие намного быстрее и надежнее чем у других. Кроме того, хорошее знание языка позволит значительно сэкономить время на написание и отладку программ.
Благодаря этому программу можно сразу применять для решения конкретных задач. Большинство примеров можно сразу применять на практике, так как примеры взяты из реальных программ.
Темы курса специально распределены так, что бы изучение проходило от простого к сложному. Поэтому, если Вы никогда не изучали язык Си, то изучить его вам не составит большого труда.
В отличие от книги не нужно больше переходить от одной иллюстрации к другой и понять какие же действия были совершены между этими картинками. Благодаря видео и закадровым комментариями информация представлена максимально подробно и на конкретных примерах.
Вы сможете изучать курс в любое время дня и ночи. И на работе и дома.
Благодаря хорошему знанию языка С, Вы сможете в своих устройствах создавать более сложную функциональность. А благодаря универсальности языка Си Вы сможете понимать чужие программы, корректировать их и писать свои программы почти под любые микроконтроллеры от младших моделей AVR и PIC до самых "навороченных" STM32 и MSP430.
Вам не нужно больше обращаться к другим учебникам или видео. Все что нужно уже собрано в одном месте, проверено и адаптировано для применения на практике.
В отличие от авторов бесплатных статей и видео, которые не отвечают за качество материала, я несу полную ответственность как автор платного учебного пособия. Поэтому, любая неточность или неясность не будет мной проигнорирована как несущественная. На все вопросы я дам исчерпывающий ответ. И если необходимо, то внесу изменения в курс.
Без поддержки не останется ни один покупатель курса. На все вопросы по материалам курса вы получаете ответ в течение 1..3 суток. Таким образом, Вам не нужно больше пытаться задавать вопросы на форумах, а получать почти хамский ответ с предложением внимательно почитать 1000 страничный стандарт языка С.