Си для встраиваемых систем — онлайн-версия

Почему текст книги доступен онлайн?

Мы верим что знания должны быть свободными, поэтому по прошествии двух лет с момента публикации книга выложена в сеть в виде набора статей.

Что за книга, кому она адресована?

На русском языке мало литературы, посвящённой программированию встраиваемых систем. Проводя занятия со своими студентами, листая форумы и натыкаясь на негодование от пользователей, я решился написать книжку.

Для кого она? Нетривиальный вопрос. С одной стороны, она для начинающих, так как повествование ведётся начиная от экскурса в историю через базовые концепции (представление чисел, системы счисления) и синтаксис языка. С другой стороны, я бы не сказал, что «чтиво» лёгкое: рассмотрена работа компилятора, некоторые особенности архитектуры ядра Cortex-M, переключение контекста выполнения, оптимизация кода и т. д.

Также сделана попытка показать уместность использования разных подходов в организации ПО: от простого суперцикла до ОСРВ (на примере FreeRTOS). В конце приведены ответы на наиболее популярные вопросы, связанные с написанием прошивок.

Оглавление

Примечание

Эпилог. Одной из первых встраиваемых систем был Apollo Guidance Computer; около 2 МГц тактовой частоты и 12 процессорных инструкций хватило, чтобы совершить самое невероятное и опасное путешествие за всю историю человечества.

Благодарности

От автора

Предисловие

  • Целевая платформа

    • История встраиваемых систем

    • Микроконтроллер и ядро ARM Cortex-M3

      • Классификация по набору инструкций

      • Классификация МК по разрядности шины данных

      • Классификация по назначению

    • Особенность встраиваемых систем

    • Прогулка по уровням абстракции

      • Операция «НЕ»

      • Операция «И»

      • Операция «ИЛИ»

    • Самопроверка

  • Представление информации

    • Порядок байтов

    • Системы счисления

      • Десятичная система счисления

      • Двоичная система счисления

      • Шестнадцатеричная система счисления

      • Восьмеричная система счисления

    • Беззнаковые и знаковые целочисленные

    • Вещественные числа

      • Числа с фиксированной запятой

      • Числа с плавающей запятой

    • Что лучше?

    • Самопроверка

  • Инструменты

    • Система контроля версий Git

    • Компиляторы и IDE

    • Статический анализатор кода

    • Самопроверка

  • Язык и компилятор

    • Почему именно Си?

    • Модульность

    • Компилятор GCC

      • Компоновщик

        • Процесс линковки

    • Утилита make

    • Область видимости

      • Автоматическая продолжительность хранения

      • Статическая продолжительность хранения

      • Динамическая продолжительность хранения

        • Стек

        • Куча

    • Самопроверка

  • Язык Си

    • Препроцессор

      • Директива #include

      • Директива #define

      • Условные директивы

      • Другие директивы и макросы

    • Комментарии

    • Типы данных

    • Модификаторы

      • Модификаторы времени хранения

      • Модификаторы класса хранилища

      • Модификаторы размера

      • Модификаторы знаковости

    • Преобразование типов

    • Указатели и массивы

      • Указатель

        • Указатель на функцию

        • Лямбда-функции в Си

      • Модификатор указателя

    • Массивы

      • Массивы указателей

    • Структуры, битовые поля, перечисления и объединения

    • Операторы

      • Арифметические

      • Операторы сравнения

      • Логические операторы

      • Побитовые операции

      • Составное присваивание

      • Другие операторы

    • Управляющие конструкции

      • Ветвление if

      • Переключатель switch

      • Циклы

        • Оператор ,

      • Ключевые слова break и continue

      • Оператор goto

    • Функции

      • Рекурсивный вызов

      • Модификаторы функции

      • Переменное количество аргументов

      • Обобщённые макросы

    • Стандартная библиотека

      • Форматированный вывод

    • Самопроверка

  • Библиотеки МК

    • Библиотека CMSIS

      • Стандартная часть

      • Вендор-зависимая часть

    • Стандартная библиотека периферии

    • Низкоуровневая библиотека

    • Слой аппаратной абстракции HAL

  • Эффективный код для Cortex-M

    • Типы данных и аргументы

    • Условные операторы

    • Переписываем циклы

    • Аллокация регистров

    • Вызов функции

    • Организация структур

    • Деление

    • Полезные инструкции

    • Самопроверка

  • Ошибки, сбои, тестирование и отладка

    • Проверка кода компилятором

    • Проверка кода утверждениями

    • Обработка ошибок

      • Железо

    • Модульное тестирование

  • Архитектура программного обеспечения

    • DOS-стиль

    • Windows-стиль

    • ПО встраиваемых систем

    • Линейная программа на главном цикле

    • Главный цикл и прерывания

    • Операционная система реального времени (ОСРВ)

      • Задачи

      • Приоритет задачи

        • Как выбирать приоритеты?

      • Планировщик

        • Вытесняющий алгоритм с квантованием времени

        • Вытесняющий алгоритм без квантования времени

        • Кооперативный алгоритм

      • Переключение контекста выполнения

      • Взаимодействие потоков

        • Очередь сообщений

        • Критические секции

        • Семафоры и мьютексы

      • Прерывания

    • Заключение

    • Самопроверка

  • Машина состояний

    • Простое решение

    • Событийный автомат

    • Машина состояний на указателях на функции

    • Таблица переходов

    • Самопроверка

  • Операционная система FreeRTOS

    • Установка и настройка

    • Типы данных

    • Работа с задачами

    • Приоритеты задач

      • Планировщик задач

    • Сопрограммы

    • Управление памятью

    • Взаимодействие потоков

      • Критические секции

      • Очереди

      • Семафоры и мьютексы

      • Уведомления задач

      • Программные таймеры

    • Пример проекта с использованием FreeRTOS

      • Усложняем логику приложения

      • Эскиз программы

      • Настройка FreeRTOS

    • Реализация

    • Самопроверка

  • Дополнительные главы

    • Таблица поиска

    • Расчёты с фиксированной запятой

    • Обработка аналоговых сигналов

    • Коммуникация

    • Загрузчик

      • Перенос таблицы в Cortex-M0

      • Таблица векторов в виде структуры

      • Единая прошивка

      • API загрузчика

    • Энергосберегающий режим

    • Где хранить настройки?

    • Несколько действий на одной кнопке

      • Сценарий №1

      • Сценарий №2

    • MISRA C и Сила Десяти Правил

    • Случайные числа

Список литературы