0г. Маршруты по темам: прибор на RTOS — архитектура и наблюдение
Маршрут Б (0.4) учит FreeRTOS по кирпичам: кучи, задачи, очереди, прерывания, гонки и мьютексы. Когда кирпичи в руках, встаёт следующий вопрос — как из них сложить прибор, который не разваливается через месяц: как задачи узнают о событиях, кто отмеряет время, как устроить программу, чтобы её можно было читать, и как увидеть, что внутри происходит на самом деле.
Маршрут Ж: прибор на RTOS отвечает на это за девять шагов — от автомата без ОС до планировщика на двух ядрах. Правила те же, что у маршрута новичка (0а.1): один шаг — один раздел, из раздела выносится столбец «Что вынести».
Опоры: маршрут Б, шаги 4–8 — разделы 25, 26, 27, 28 и 30. Без них маршрут Ж читается с трудом: он пользуется задачами, очередями и мьютексами как готовыми словами.
Как это называется в документации
Оригинал Перевод firmware architecture архитектура прошивки: из каких частей она сложена и как они говорят друг с другом event-driven design построение на событиях: части ждут событий, а не опрашивают друг друга deadline miss пропущенный срок: задача не успела к назначенному моменту
0г.1 Как идти по маршруту Ж
Маршрут идёт тремя блоками. Шаги 1–4 — чем задачи говорят и как отмеряют время: автомат и очередь событий, события и уведомления, программные таймеры, буферы потоков. Шаг 5 — архитектура: активные объекты собирают всё это в прибор. Шаги 6–9 — наблюдение и надёжность: конфигурация ядра, сторож задач, трассировка и два ядра.
Уровень маршрута — средний → продвинутый: продвинутый шаг один — трассировка (33б), остальные восемь — средние.
0г.2 Маршрут Ж: прибор на RTOS
Уровень маршрута: средний → продвинутый. Девять шагов: связь задач и время, архитектура на событиях, наблюдение за работающей системой.
| Шаг | Раздел | Что вынести | Что пока пропустить |
|---|---|---|---|
| 1 | 23а | автомат: сначала таблица переходов, потом код; очередь событий из прерывания в цикл; когда всё же нужна ОС | 23а.5 неблокирующий драйвер |
| 2 | 31 | группа событий, точка синхронизации, уведомление задачи — и что из них выбрать | 31.5 входы и выходы по маске |
| 3 | 29 | программный таймер и задача-демон; что можно в обратном вызове и чего нельзя; сторож связи на таймере | 29.8 демон как исполнитель по запросу |
| 4 | 32 | потоковый буфер и буфер сообщений; правило одного писателя и одного читателя | 32.6 связь между ядрами — к шагу 9 |
| 5 | 32а | активный объект: задача, своя очередь и автомат; прибор из трёх объектов; длина очереди и переполнение | 32а.4 сравнение со старым способом |
| 6 | 33 | базовые параметры ядра, память и статистика, режим без тика | 33.4 расширенное |
| 7 | 33а | сторож для нескольких задач: задача-сторож и два аппаратных сторожа; ложные срабатывания и долгая законная работа | 33а.6 слепок перед сбросом |
| 8 | 33б | трассировка: макросы ядра, запись в кольцо, диаграмма на компьютере; инверсия, дрожание и голодание на трассе | 33б.6 цена трассировщика |
| 9 | 152 | FreeRTOS на двух ядрах: тик и закрепление задач, гонка на двух ядрах и три способа её лечить | 152.4 esp_timer |
Порядок держится на одном: активный объект (5) — это автомат (1) в своей задаче, который ждёт событий (2), отмеряет время таймерами (3) и получает данные через очередь или буфер (4). Наблюдение идёт после архитектуры: сторожу задач (7) и трассе (8) есть что показать, когда задачи устроены одинаково.
0г.3 Что нужно на столе
- Шаги 1–8. Discovery F407 с FreeRTOS из маршрута Б; на ней — сторож задач с IWDG и WWDG (33а.3).
- Шаг 8. Канал выгрузки трассы на компьютер (33б.4).
- Шаг 9. Плата с ESP32: два ядра на одном кристалле (152.1).
0г.4 Куда дальше: развилки после маршрута Ж
- 34а — Zephyr: другая операционная система для того, кто знает FreeRTOS.
- 35в — отказ в поле: слепок состояния, переживающий сброс.
- 35г — журнал на приборе вместо
printf. - 21а — RTT: вывод через отладчик без лишних выводов.
0г.5 Грабли
Взять ОС ради одной задачи. Сначала честное сравнение с прибором без ОС (23а.7): автомат и очередь событий решают многое без планировщика.
Двое пишут в один потоковый буфер. У потокового буфера и буфера сообщений правило одного писателя и одного читателя (32.3).
Ждать в обратном вызове таймера. Обратные вызовы выполняет одна задача-демон; что в них можно и чего нельзя — 29.4.
Сторож, которого кормит одна задача. Живая задача кормит сторожа, пока соседняя висит; сторож для нескольких задач проверяет отметку каждой (33а.1–33а.2).
Искать инверсию приоритетов на глаз. Инверсия, дрожание и голодание видны на трассе (33б.5), а не в выводе в терминал.
0г.6 Итоги
- Маршрут Ж — девять шагов после маршрута Б: автомат и очередь событий (23а), события и уведомления (31), программные таймеры (29), буферы (32), активные объекты (32а), конфигурация (33), сторож задач (33а), трассировка (33б), два ядра (152).
- Уровень — средний → продвинутый; продвинутый шаг — 33б.
- Три блока: связь задач и время (1–4), архитектура на событиях (5), наблюдение и надёжность (6–9).
- После маршрута — четыре развилки: 34а, 35в, 35г, 21а.
Дальше: раздел 1 «Микроконтроллер как таковой» — что лежит внутри кристалла: ядро, память, периферия — и почему без этого всё дальнейшее придётся принимать на веру.