C++ для embedded і MilTech
Прошивка мікроконтролерів на C++17: регістри, драйвери, переривання, CRC, ШІМ і watchdog на віртуальних платах.
MilTech · за підпискою
Навчіться читати байти, які летять між апаратом і наземною станцією
Отримати доступ до курсу
Курс за підпискою · Навчання у власному темпі
Про курс
Між автопілотом дрона і наземною станцією немає «повідомлень» — є потік байтів через радіомодем чи послідовний порт UART. Щоб з нього вийшли напруга батареї, координати й режим польоту, хтось має знайти початок кадру, перевірити контрольну суму, розібрати поля в правильному порядку байтів, пережити шум в ефірі й не впасти на першому ж дивному кадрі. Правила такого пакування називаються протоколом, а потік даних про стан апарата — телеметрією. Цей курс — про роботу з ними: від окремого байта до повноцінного декодера наземної станції.
Наскрізний сценарій — цивільний дрон для аерофотозйомки та його наземна станція. Ви працюватимете із записами («захопленнями») потоку в шістнадцятковому вигляді, із потоком, у якому є сміття й пошкоджені кадри, з пропусками послідовних номерів, з двома радіоканалами одночасно і з прошивками різних версій.
Аудиторія
Знаєте Python і C++
Напишете парсер бінарних кадрів з CRC, COBS і ресинхронізацією, який не падає на пошкоджених даних.
Шлях «QA-інженер у MilTech»
Навчитеся оцінювати втрати за послідовними номерами і перевіряти стійкість парсера до обірваних кадрів.
Шлях «MilTech Software Engineer»
Зберете декодер наземної станції для навчального формату TLM-1, натхненного протоколом MAVLink.
Курс спирається на знання, позначені нижче як обов’язкові.
Потрібно знати
Python на рівні безкоштовного курсу «Основи програмування на Python» — зокрема уроки про рядки (split, strip, startswith), списки, словники і sorted: вони трапляються з першого модуля
C++ на рівні безкоштовного курсу «Основи програмування на C++», включно з уроками про вектори, функції, структури, посилання, типи uint8_t/uint16_t, switch і enum class.
C++ на рівні курсу «C++ Advanced».
const uint8_t* з довжиною (модуль 3), ітератори begin()/end() вектора (модуль 5), std::deque (модуль 8), а в модулях 9–14 — методи класу з приватними полями, std::optional, std::array, std::string і std::to_string, код, розбитий на .h і .cpp.printf, scanf, std::getline, std::istringstream) у задачах уже написані — їх достатньо вміти прочитатиВарто знати
Здебільшого арифметика; у модулі 12 знадобляться радіани і косинус (відстань між GPS-точками) — їх з нуля пояснює курс «Математика для MilTech з нуля»
Не потрібно знати заздалегідь
Байти й шістнадцятковий запис, порядок байтів, побітові операції й зсуви, struct і bytes у Python, контрольні суми, усі формати кадрів, безпечний розбір байтів у C++
Радіообладнання чи досвід з дронами.
Якщо цих знань ще немає — пройдіть курси за порядком:
Результат
розбирати й збирати бінарні поля: порядок байтів (little/big-endian), знакові й беззнакові числа, масштаби одиниць
ділити потік на кадри за стартовим байтом і довжиною, писати парсер як скінченний автомат
рахувати контрольні суми sum8, XOR, CRC-8 і CRC-16 (CRC — Cyclic Redundancy Check) і розуміти їхні параметри
кодувати й декодувати байт-стафінг COBS і SLIP — способи відділяти кадри спеціальним байтом
ресинхронізуватися після сміття так, щоб не губити справжні кадри
працювати з навчальним форматом TLM-1, натхненним відкритим протоколом дронів MAVLink: заголовок, послідовний номер, адреса апарата, тип повідомлення, crc_extra
оцінювати втрати за послідовними номерами і частоти повідомлень, рахувати бюджет каналу
проєктувати розширювані TLV-записи (тип–довжина–значення) і сумісність версій протоколу
писати той самий парсер на Python і на C++ так, щоб він не падав і не читав за межами буфера, — і зібрати фінальний декодер наземної станції
Формат
14 модулів у логіці «знизу вгору»: байти → кадри → контрольні суми → стійкість до шуму → повний формат повідомлень → аналіз втрат і частот → розширення й версії → фінальний декодер. У кожному модулі — теорія з робочим прикладом і 2–3 задачі з автоматичною перевіркою: написати з нуля, знайти помилку в робочому на вигляд коді або розширити наявний модуль. Плюс тести з поясненнями і дві практичні форми. Більшість задач (25 з 40) — на Python, 15 — на C++17 (так пишуть бортовий і станційний код), лише стандартна бібліотека. Кожне рішення перевіряється на прихованих захопленнях: з іншим шумом, переповненням лічильників, від'ємними значеннями, обірваними кадрами.
15 уроків з прикладами
40+ завдань з автоматичною перевіркою
5 тестів для самоперевірки
Онлайн на my.prog.academy, без встановлення програм
AI-помічник
На сторінках курсу, уроків і завдань є кнопка «Запитати AI». Помічник знає матеріали саме цього курсу й урок, на якому ви зараз, тому відповідає по темі й показує, у яких уроках про це йдеться.
Не зрозуміли урок з першого разу — попросіть пояснити простіше або дати ще один приклад.
Застрягли — підкаже, з чого почати, і допоможе знайти помилку у вашому рішенні. Готового рішення не дає.
Запитайте, де пояснювали поняття, — і отримаєте посилання на потрібні уроки курсу.
Уточнюйте без повторів: помічник пам’ятає розмову, а нещодавні розмови курсу зберігаються.
Входить у кожен тариф оплаченої підписки — Basic і Premium. У Premium ліміти використання AI-помічника вищі — ним можна користуватися активніше. Це помічник у навчанні, а не генератор готових відповідей: він пояснює й підказує, а завдання ви розв’язуєте самі.
Програма
14 модулів, 40+ практичних завдань з автоматичною перевіркою і 5 тестів. Відкрийте модуль, щоб побачити всі теми.
Як число стає байтами і назад: ширина поля, little- і big-endian, знакові числа, масштаби одиниць
UART передає байти без меж між повідомленнями. Як знайти кадр: стартовий байт, поле довжини, скінченний автомат
Як приймач дізнається, що кадр пошкоджено: прості суми, CRC та їхні параметри, контрольне значення 123456789
Коли межі кадру задає роздільник, він не має траплятися всередині даних: SLIP-екранування і COBS
Хибні стартові байти, пошкоджені кадри, обірвані записи: як не втратити жодного справжнього кадру
Повна специфікація MAVLink-подібного навчального формату: поля заголовка, таблиця повідомлень, CRC з crc_extra
Лічильник seq переповнюється, апаратів і компонентів кілька, копії приходять двома радіо: рахуємо втрати чесно
Скільки разів на секунду приходить кожне повідомлення, живе вікно для моніторингу і бюджет каналу
Тип–довжина–значення: як додавати поля, не ламаючи старі приймачі, і як не вийти за межі буфера
TLM-2: усічення нулів, розширені поля, прапорці сумісності і несумісності — і як приймати кілька версій одночасно
Невизначена поведінка за межами буфера, перевірка довжини до читання, читач байтів, std::optional, цілочисельне просування і файли.h/.cpp
Валідний CRC ще не означає осмислений кадр: довжини, переліки, текст, правдоподібність координат і часу
З кадрів — у таблицю для аналітиків: стовпці, одиниці, пропуски, «останнє відоме значення» і форматування без float
Збираємо все: ресинхронізація, CRC з crc_extra, втрати за seq, розбір повідомлень і звіт після польоту — на Python і C++
Стек
Код пишете й запускаєте в браузері на платформі — встановлювати нічого не потрібно.
Застосування
Доступ
Заповніть коротку форму на цій сторінці.
Після заявки оберіть Telegram або Viber — бот надішле подальші інструкції щодо доступу.
Уроки, практика й тести — на my.prog.academy, у зручному для вас темпі.
Контакт
Залиште контакти — надішлемо деталі доступу до курсу «Протоколи і телеметрія: бінарні фрейми, CRC, MAVLink-подібні повідомлення».
Прошивка мікроконтролерів на C++17: регістри, драйвери, переривання, CRC, ШІМ і watchdog на віртуальних платах.
Планування задач, яке можна довести: утилізація, час відгуку, RM і EDF, інверсія пріоритетів і контроль дедлайнів.
Кути, вектори, матриці, похідна, інтеграл і шум вимірювань — саме та математика, на яку спираються курси MilTech.
Залиште запитання — підкажемо, чи підходить вам курс і з чого краще почати.