Архітектура ARM та STM32 без HAL. Передмова

Інтерактивний курс про те, як ядро Cortex-M виконує код, працює з пам’яттю та керує периферією.

Embedded Developer

Від STM32 до Linux Kernel


Передмова

Більшість курсів починається зі слів:

«Візьміть STM32CubeMX, натисніть Generate Code, відкрийте main.c…»

Через кілька хвилин світлодіод блимає. Але якщо запитати, чому він блимає, більшість учнів не відповість.

Вони знають, що потрібно натиснути, але не розуміють, що відбулося всередині процесора.

Цей підручник побудований інакше.

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

Спочатку зрозуміємо, що таке пам’ять, регістри й інструкції. Потім навчимося керувати периферією напряму через регістри. Після цього розберемо роботу таймерів, переривань, DMA та операційної системи реального часу. І лише коли ця основа стане зрозумілою, перейдемо до Linux Kernel і драйверів пристроїв.

Мета — навчити не конкретному мікроконтролеру, а способу мислення інженера. Якщо ви зрозумієте принципи, то зможете працювати з будь-якою ARM-платформою, незалежно від виробника.

Кожен розділ складається з п’яти частин:

  • Теорія — пояснення нової теми.
  • Інтерактивна лабораторія — практичне дослідження концепції.
  • Практика — невелике завдання для закріплення.
  • Контрольні запитання — перевірка розуміння.
  • Підготовка до наступного розділу — логічний місток до нової теми.

Нам не доведеться нічого запам’ятовувати напам’ять. Кожна нова ідея буде природним продовженням попередньої.


Частина I

Як думає комп’ютер


Розділ 1

Комп’ютер ще нічого не вміє

Чому ми починаємо саме звідси

Якщо ви зараз подивитеся на плату STM32, Raspberry Pi Pico чи будь-який інший мікроконтролер, то легко уявите, що всередині працює складна програма, яка «розуміє», що таке світлодіод, кнопка чи дисплей.

Насправді це не так.

Для процесора не існує ні світлодіода, ні кнопки, ні UART, ні таймера.

Він не знає навіть, що таке число.

Усе, що вміє процесор, — це виконувати дуже прості машинні інструкції одну за одною.

Наприклад:

LOAD
STORE
ADD
SUB
JUMP

Для людини ці слова мають зміст. Для процесора — це лише набір бітів, які запускають певні електричні схеми. Він не думає. Він не аналізує. Він лише виконує. Саме тому будь-який сучасний комп’ютер, смартфон чи супутник у космосі побудований на одному принципі:

Процесор виконує послідовність інструкцій і змінює стан пам’яті.

Усе інше — лише наслідок цього.


Що таке мікроконтролер

Мікроконтролер — це маленький комп’ютер, у якому на одному кристалі об’єднано кілька компонентів:

  • процесорне ядро;
  • оперативну пам’ять (RAM);
  • постійну пам’ять (Flash);
  • контролери периферії;
  • системну шину;
  • тактовий генератор;
  • модулі введення та виведення.

Саме тому STM32 може працювати самостійно без операційної системи. Після подачі живлення він одразу починає виконувати програму, записану у Flash-пам’ять.


Перший принцип Embedded

Коли інженер натискає кнопку або вмикає світлодіод, він насправді не працює з кнопкою чи світлодіодом. Він змінює певний біт у регістрі пам’яті. Тобто весь світ Embedded можна звести до однієї простої ідеї:

Керування пристроями — це читання і запис пам’яті за спеціальними адресами.

Цю думку ми будемо поступово розкривати протягом усього курсу.


Інтерактивна лабораторія

На цьому етапі відкрийте лабораторію ARM Core Concepts.

Вона покаже, з яких основних компонентів складається мікроконтролер, як процесор взаємодіє з пам’яттю та периферією, і як дані рухаються всередині системи. Не намагайтеся запам’ятати всі деталі — зараз важливо сформувати загальну картину.


Практика

Уявіть, що перед вами абсолютно новий мікроконтролер, про який ви нічого не знаєте.

Спробуйте відповісти:

  1. Де зберігатиметься програма?
  2. Де будуть змінні під час виконання?
  3. Як процесор дізнається, яку інструкцію виконувати наступною?
  4. Як він може увімкнути світлодіод, якщо не знає, що таке світлодіод?

Не шукайте правильні відповіді в інтернеті. Спробуйте пояснити їх власними словами.


Контрольні запитання

  1. Чим процесор відрізняється від мікроконтролера?
  2. Які основні компоненти входять до складу мікроконтролера?
  3. Чому процесор не «розуміє», що таке світлодіод?
  4. Який головний принцип роботи будь-якої програми?
  5. Чому в Embedded-системах робота з периферією зводиться до роботи з пам’яттю?

Підсумок

У цьому розділі ми не написали жодного рядка коду, бо перш ніж навчитися програмувати мікроконтролер, потрібно зрозуміти, що він собою являє. Ми побачили, що процесор не працює з абстрактними поняттями на кшталт «кнопка» чи «світлодіод». Для нього існують лише інструкції та пам’ять.


Далі

У наступному розділі ми зробимо ще один крок углиб і розберемося, як процесор виконує інструкції. Ми прослідкуємо шлях однієї команди від моменту її зчитування з пам’яті до виконання всередині ядра ARM Cortex-M. Саме тоді стане зрозуміло, чому частота процесора, конвеєр і регістри настільки важливі для продуктивності.