Си для встраиваемых систем — онлайн-версия
Почему текст книги доступен онлайн?
Мы верим что знания должны быть свободными, поэтому по прошествии двух лет с момента публикации книга выложена в сеть в виде набора статей.
Что за книга, кому она адресована?
На русском языке мало литературы, посвящённой программированию встраиваемых систем. Проводя занятия со своими студентами, листая форумы и натыкаясь на негодование от пользователей, я решился написать книжку.
Для кого она? Нетривиальный вопрос. С одной стороны, она для начинающих, так как повествование ведётся начиная от экскурса в историю через базовые концепции (представление чисел, системы счисления) и синтаксис языка. С другой стороны, я бы не сказал, что «чтиво» лёгкое: рассмотрена работа компилятора, некоторые особенности архитектуры ядра Cortex-M, переключение контекста выполнения, оптимизация кода и т. д.
Также сделана попытка показать уместность использования разных подходов в организации ПО: от простого суперцикла до ОСРВ (на примере FreeRTOS). В конце приведены ответы на наиболее популярные вопросы, связанные с написанием прошивок.
Оглавление
Примечание
Эпилог. Одной из первых встраиваемых систем был Apollo Guidance Computer; около 2 МГц тактовой частоты и 12 процессорных инструкций хватило, чтобы совершить самое невероятное и опасное путешествие за всю историю человечества.
Благодарности
От автора
Предисловие
-
История встраиваемых систем
Микроконтроллер и ядро ARM Cortex-M3
Классификация по набору инструкций
Классификация МК по разрядности шины данных
Классификация по назначению
Особенность встраиваемых систем
Прогулка по уровням абстракции
Операция «НЕ»
Операция «И»
Операция «ИЛИ»
Самопроверка
-
Порядок байтов
Системы счисления
Десятичная система счисления
Двоичная система счисления
Шестнадцатеричная система счисления
Восьмеричная система счисления
Беззнаковые и знаковые целочисленные
Вещественные числа
Числа с фиксированной запятой
Числа с плавающей запятой
Что лучше?
Самопроверка
-
Система контроля версий Git
Компиляторы и IDE
Статический анализатор кода
Самопроверка
-
Почему именно Си?
Модульность
Компилятор GCC
Компоновщик
Процесс линковки
Утилита
makeОбласть видимости
Автоматическая продолжительность хранения
Статическая продолжительность хранения
Динамическая продолжительность хранения
Стек
Куча
Самопроверка
-
Препроцессор
Директива
#includeДиректива
#defineУсловные директивы
Другие директивы и макросы
Комментарии
Типы данных
Модификаторы
Модификаторы времени хранения
Модификаторы класса хранилища
Модификаторы размера
Модификаторы знаковости
Преобразование типов
Указатели и массивы
Указатель
Указатель на функцию
Лямбда-функции в Си
Модификатор указателя
Массивы
Массивы указателей
Структуры, битовые поля, перечисления и объединения
Операторы
Арифметические
Операторы сравнения
Логические операторы
Побитовые операции
Составное присваивание
Другие операторы
Управляющие конструкции
Ветвление
ifПереключатель
switchЦиклы
Оператор
,
Ключевые слова
breakиcontinueОператор
goto
Функции
Рекурсивный вызов
Модификаторы функции
Переменное количество аргументов
Обобщённые макросы
Стандартная библиотека
Форматированный вывод
Самопроверка
-
Библиотека CMSIS
Стандартная часть
Вендор-зависимая часть
Стандартная библиотека периферии
Низкоуровневая библиотека
Слой аппаратной абстракции HAL
-
Типы данных и аргументы
Условные операторы
Переписываем циклы
Аллокация регистров
Вызов функции
Организация структур
Деление
Полезные инструкции
Самопроверка
Ошибки, сбои, тестирование и отладка
Проверка кода компилятором
Проверка кода утверждениями
Обработка ошибок
Железо
Модульное тестирование
Архитектура программного обеспечения
DOS-стиль
Windows-стиль
ПО встраиваемых систем
Линейная программа на главном цикле
Главный цикл и прерывания
Операционная система реального времени (ОСРВ)
Задачи
Приоритет задачи
Как выбирать приоритеты?
Планировщик
Вытесняющий алгоритм с квантованием времени
Вытесняющий алгоритм без квантования времени
Кооперативный алгоритм
Переключение контекста выполнения
Взаимодействие потоков
Очередь сообщений
Критические секции
Семафоры и мьютексы
Прерывания
Заключение
Самопроверка
-
Простое решение
Событийный автомат
Машина состояний на указателях на функции
Таблица переходов
Самопроверка
-
Установка и настройка
Типы данных
Работа с задачами
Приоритеты задач
Планировщик задач
Сопрограммы
Управление памятью
Взаимодействие потоков
Критические секции
Очереди
Семафоры и мьютексы
Уведомления задач
Программные таймеры
Пример проекта с использованием FreeRTOS
Усложняем логику приложения
Эскиз программы
Настройка FreeRTOS
Реализация
Самопроверка
-
Таблица поиска
Расчёты с фиксированной запятой
Обработка аналоговых сигналов
Коммуникация
Загрузчик
Перенос таблицы в Cortex-M0
Таблица векторов в виде структуры
Единая прошивка
API загрузчика
Энергосберегающий режим
Где хранить настройки?
Несколько действий на одной кнопке
Сценарий №1
Сценарий №2
MISRA C и Сила Десяти Правил
Случайные числа
Список литературы