Програмне забезпечення для вбудованих систем

Основний словник англійської мови для вбудованих систем: RTOS, ISR, HAL, BSP, bare metal, завантажувач, карта пам’ яті, скрипт з’ єднання — з визначеннями і прикладами використання.

Інженерія вбудованих систем працює на перетині апаратного та програмного забезпечення, і її словник відображає цю подвійну природу. Якщо ви пишете технічну документацію, переглядаєте код прошивки або презентуєте змішану аудиторію апаратного/ програмного забезпечення, то точність у цьому словнику є обов’ язковою.

Цей посібник містить основні терміни розробки вбудованих систем з прикладами англійською мовою.


Абстракція апаратного забезпечення

HAL (Hardware Abstraction Layer) — рівень апаратної абстракції

** HAL ** — це програмний шар, який надає послідовний API для апаратного забезпечення, що знаходиться під ним, приховуючи відмінності між варіантами апаратного забезпечення від коду, що знаходиться вище.

“Програмуючи проти HAL, а не апаратних регістрів безпосередньо, ми можемо перенести програму на іншу сім’ ю MCU з мінімальними змінами коду.” “HAL забезпечує єдину функцію uart_write() незалежно від того, який периферійний пристрій UART використовує апаратне забезпечення.”

БСП (Board Support Package)

** BSP ** є збіркою програмного забезпечення низького рівня, специфічного для певної апаратної плати. Він включає HAL, драйвери периферійних пристроїв і код запуску.

“BSP для нетипової плати-носія містить драйвери для вбудованого акселерометра, Ethernet PHY і приймача CAN.”

  • “Коли ми використовуємо нову апаратну версію, першим завданням є оновлення BSP, щоб відобразити змінені призначення виводів.” *

Металевий блиск. РТО

Металургія

** Розробка на основі оголеного металу ** означає написання мікропрограм, які працюють безпосередньо на апаратному забезпеченні без операційної системи. Розробник має повний контроль над програмою, але має керувати всіма параметрами часу і спільного використання ресурсів вручну.

“Для цього вузла датчика з низькою потужністю ми використовували оголений метал — немає операційної системи, а архітектура, керована перериваннями, достатньо проста, щоб керувати не використовуючи планувальник.”

  • “Голий метал підходить, коли система проста і детермінована. Як тільки вам потрібна одночасність або управління завданнями, RTOS стає привабливою.”*

RTOS (Real-Time Operating System) — операційна система реального часу

** RTOS ** це легка операційна система, розроблена для вбудованих систем, яка забезпечує планування завдань, міжзадачне спілкування і службу часових параметрів з детерміністичними (передбачуваними) часами відповіді.

Поширені приклади RTOS: FreeRTOS, Zephyr, ThreadX, RTEMS.

“Ми використовуємо FreeRTOS для керування чотирма одночасними завданнями: вибіркою датчиків, обробкою даних, зв’язком Bluetooth і оновленням дисплея.”

  • “Распорядник RTOS забезпечує, що завдання керування двигуном виконується кожну 1 мс з максимальним коливанням 50 мкс.” *

Детермінізм і реальність

** Система реального часу ** гарантує, що певні операції завершаться у визначений час. Це відрізняється від «швидкості» — система реального часу може не бути швидкою, але вона передбачувана.

“Важливою вимогою реального часу є те, що сигнал гальмування обробляється протягом 10 мс від вводу датчика — без винятків.” “FreeRTOS є м’якою системою реального часу в більшості конфігурацій. Для жорстких гарантій реального часу, ми оцінили RTEMS.”


Interrupts

ІСР (Interrupt Service Routine)

** ISR ** — це функція, яку процесор викликає негайно, коли відбувається апаратне переривання, призупиняючи виконання головної програми.

  • “ISR для переривання прийому UART читає вхідний байт і поміщає його у буфер кільця. Він повинен завершитись за менше ніж 5 мкс, щоб уникнути втрати наступних байтів на 115200 baud.”*
  • “Зберігати короткі ISR — відкладати будь- яку нетривіальну обробку на завдання за допомогою семафору або черги.” *

Затримка і пріоритет переривання

** Затримка переривання ** — це час між апаратною подією і виконанням першої інструкції ISR.

“Наше профілювання показує затримку переривання приблизно 800 нс на цьому МЧУ на 168 МГц — добре в межах вимог.”

  • “Ми присвоїли перериванню CAN receive вищий пріоритет, ніж перериванню refresh display, щоб переконатися, що повідомлення шини не будуть пропусчені.” *

Пам’ять і зв’язок

Карта пам’яті

** карта пам’ яті ** описує, як організовано адресний простір мікроконтролера — які адреси відповідають Flash, RAM, периферійним пристроям та іншим регіонам.

“Карта пам’ яті показує, що Flash починається з 0x08000000, а RAM починається з 0x20000000. Скрипт linker використовує ці адреси для розміщення коду і даних у правильних регіонах.”

Скрипт ліворуч

** Скрипт посилання ** — це файл налаштувань, який вказує програмі посилання, як впорядкувати скомпільований код і дані у цільових областях пам’ яті.

  • “Скрипт посилання визначає три області пам’ яті: FLASH для коду, RAM для стека і купи, і CCMRAM для даних, що потребують швидкого доступу. Ми розміщуємо вектори переривання управління двигуном в CCMRAM, щоб зменшити затримку доступу.”*

Сток и куча

У вбудованих системах, розміри ** стека ** і ** купу ** повинні бути явно налаштовані — немає віртуальної пам’ яті, на яку можна покластися.

  • “Ми зіткнулися з серйозною помилкою, спричиненою переповненням стека в завдання Bluetooth. Я збільшив розмір стека завдань з 512 до 1024 слів.”* “Використання купа особливо небезпечно у вбудованих системах — фрагментація пам’ яті може призвести до невдач у розподілі, які важко відтворити.”

Процес завантаження

Bootloader

** Загрузчик запуску ** це невелика програма, яка запускається перед головною програмою. Зазвичай він обробляє початкове налаштування обладнання і може підтримувати оновлення мікропрограм через UART, USB або мережевий інтерфейс.

  • “Загрузчик перевіряє наявність чинного штампу мікропрограм на SD-карті під час запуску. Якщо знайдено, він оновлює внутрішній Flash і перезавантажує в нову програму.”* “Ми використовуємо двобанковий Flash-розклад, щоб завантажувач міг записувати нові програмні засоби в банк B, поки банк A ще працює, а потім перемикатися між банками при наступному скиданні.”

Скинути вектор і код запуску

** Вектор скидання ** це адреса першої інструкції, яку виконає процесор після скидання. startup code (часто називається crt0 або startup.s ) ініціалізує середовище виконання C перед запуском main().

“Запусковий код нулює розділ BSS, копіює розділ даних з Flash в RAM, і викликає глобальні конструктори перед переходом до main().”


Практичні фрази для вбудованих інженерів

  • “ISR має бути ре- вхідним і не повинен викликати жодних не- ре- вхідних функцій.”
    • “Ми мапуємо цей драйвер периферійних пристроїв в інтерфейс HAL, щоб ми могли обмінюватись апаратним забезпеченням без зміни коду програми.” *
  • “Частота тисків RTOS становить 1 кГц, що дає нам роздільну здатність планування 1 мс.”
    • “Скрипт зв’ язування потрібно оновити, щоб розмістити буфери DMA у регіоні пам’ яті, який не кешується.” *
  • “Голий метал підходить для фази прототипування, але як тільки ми додамо бездротовий зв’язок, нам знадобиться RTOS для управління завданнями.”

Вбудований словник систем є точним за необхідності - в області, де неправильно розраховане переривання може призвести до аварії системи, точність мови має таке ж значення, як і точність коду. Ці терміни будуть вам корисними у технічній документації, перегляді проекту і обговоренні різних функцій з колегами з апаратного і програмного забезпечення.

Наприклад, спільне використання ключів: спільне використання ключів у спільному вікні

Основний словник - RTOS, ISR, HAL, BSP, bare metal, bootloader, memory map, linker script - забезпечує фундаментальні будівельні блоки для обговорення розробки вбудованих систем. Однак, навіть з досконалим технічним знанням, ефективне спілкування в рамках розподіленої команди представляє унікальні виклики, пов’язані з використанням англійської мови. Поширена проблема виникає при перекладі детальних технічних специфікацій в чітке і коротке спілкування - особливо при роботі з різними рівнями досвіду або культурними інтерпретаціями прямоти. Розглянемо такий сценарій: Сара, старший інженер, переглядає запит на завантаження від Давида, який вводить нову процедуру служби переривання (ISR) для обробки даних датчиків. Її коментар: «Це … функціональне. Але логіка здається надто складною. Чи можете ви пояснити обґрунтування використання ISR безпосередньо замість завдання вищого рівня? “David, відносно новий для команди і, можливо, звиклий до більш прямого стилю, може інтерпретувати це як критику без розуміння нюансів, що стосуються ефективності, потенційних умов гонки або довгострокової підтримки.

Інша поширена ситуація включає пояснення складних концепцій під час щоденних виступів або розмов Slack. Наприклад, Марія, працюючи над оптимізацією використання пам’яті, обговорює свій підхід з Беном: «Я використовую карту пам’яті для відстеження всіх виділених регіонів. Це важливо для зневадження і запобігання фрагментації. ” Бен, розуміючи * концепцію * карти пам’яті, може не повністю розуміти практичні наслідки - як це впливає на дизайн завантажувача, генерацію скриптів лінкера або загальну архітектуру системи. Аналогічно, при документуванні зміни в linker script, важливо вийти за рамки простого зауваження «змінений розмір секції» і точно сформулювати * чому * ця модифікація була необхідна, посилаючись на конкретні показники продуктивності або потенційні апаратні обмеження. Використання точної мови уникає неоднозначності і забезпечує, що всі знаходяться на одній сторінці. Ключова відмінність полягає не тільки в розумінні визначення, але і в розумінні того, як вони взаємодіють у більшому системному контексті.

Крім того, навіть здавалося б прості фрази можуть мати різні конотації. Замість того, щоб сказати « Це спрацює », що не має точності, набагато ефективніше сказати: « Засновано на нашій поточній карті пам’ яті і налаштуванні скрипту лінкера, цей ISR повинен надійно обробляти до 100 зчитувань датчиків за секунду без виклику паніки ядра. » Такий рівень деталізації демонструє ретельність і зменшує ризик нерозуміння. Також важливо бути уважним до пасивного голосу - активно заявляючи * хто * відповідальний за завдання (“Я зневаджу це”), а не описуючи * що * сталося (“Це було зневаджено”).

# Example: Using `scaredycat` (a hypothetical memory analysis tool)
# to visualize the memory map after running the ISR.

scaredycat -m /path/to/linker.script

Врешті-решт, оволодіння цими словниковими термінами - це тільки половина битви. Успішне спілкування про вбудовані системи англійською мовою вимагає глибокого розуміння контексту, продуманого фразування і розуміння того, як ваші слова можуть бути сприйняті іншими - особливо в різноманітному і розподіленому командному середовищі.

Поширені запитання

Про що ця стаття "Програмне забезпечення для вбудованих систем"?

Основний словник англійської мови для вбудованих систем: RTOS, ISR, HAL, BSP, bare metal, завантажувач, карта пам’ яті, скрипт з’ єднання — з визначеннями і прикладами використання.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Програмне забезпечення для вбудованих систем"?

Приблизно 8 min.