English for Firmware Engineers
Освоєння словникового запасу для обговорення завантажувачів, карт реєстрів, векторів переривань і зневаджування апаратного забезпечення англійською мовою на роботі.
Програмне забезпечення розташоване на межі між апаратним та програмним забезпеченням, і англійська мова, якою використовується для його опису, запозичує слова з обох світів — такі терміни з електротехніки, як « pull- up resistor », разом з термінами з програмного забезпечення, на зразок « interrupt handler ». Правильне використання цього словника має більше значення, ніж зазвичай, оскільки неправильно використане слово у перегляді коду програвача може призвести до того, що ваш колега почне переслідувати неправильну ваду на фізичній платі, яку він не зможе легко перевірити з спільного екрана. Цей посібник містить основні слова, фрази, які інженери з розробки мікропрограм використовують щодня, а також помилки, які найчастіше збентежують людей, для яких мова не є рідною.
Ключовий словник
Загрузчик Невелика програма, яку запускають першою під час вмикання пристрою, відповідальна за ініціалізацію мінімального обладнання і завантаження головної програми до пам’ яті (або флеш- пам’ яті) перед передачею керування.
- Приклад: « Загрузчик перевіряє підпис мікропрограми перед переходом до вектора скасування програми. » *
** Реєстрація карти ** Задокументований набір адрес пам’ яті, що відповідають апаратним контролем і регістрам стану на мікроконтролері або периферійному пристрої.
- Приклад: « Перевірити карту регістрів в таблиці даних — біт 3 керуючого регістру вмикає переривання прийому UART ». *
** Рутинна обслуговування переривання (ISR) ** Функція, до якої процесор автоматично переходить, коли відбувається певна подія апаратного забезпечення, що перериває звичайний поток програми.
- Приклад: « Тримайте ISR коротким — виконуйте важку обробку у головному циклі і просто встановіть прапорець всередині обробника переривань. » *
Спринципи Процес фільтрування неправдивих, швидких переходів сигналів, спричинених механічними перемикачами або шумними сигналами, щоб один фізичний натиск реєструвався як одна логічна подія.
- Приклад: « Ми додали 20- мілісекундний відскок на вхід кнопки; без нього одне натискання було зареєстровано як три. » *
** Таймер для собаки-охоронця ** Аппаратний таймер, який скидає систему, якщо програмне забезпечення не може періодично « затискатися » або « натискатися », використовується для автоматичного відновлення після зависання.
- Приклад: « Якщо головний цикл застряг у очікуванні на датчик, охоронний собака скине плату через 500 мілісекунд. » *
** Флеш-пам’ять / нелетюче зберігання ** Постійний об’ єкт зберігання, який зберігає дані без живлення, використовується для зберігання штампу мікропрограми і, часто, даних налаштування.
- Приклад: « Ми зберігаємо значення калібрування у резервованому секторі флеш- пам’ яті, щоб вони пережили цикл живлення. » *
Периферия Компонент апаратного забезпечення, приєднаний до мікроконтролера, наприклад, UART, шина SPI, ADC або таймер, з яким програмне забезпечення налаштовує і взаємодіє за допомогою регістрів.
- Приклад: « Датчик температури знаходиться на периферії I2C, і ми запитуємо його кожні 100 мілісекунд. » *
Бит-банг Реалізація протоколу зв’ язку у програмному забезпеченні шляхом безпосереднього перемикання виводів GPIO, замість використання спеціального апаратного пристрою. Приклад: “Ми біт-бангуємо протокол SPI на цьому виводі, тому що апаратний контролер SPI вже використовується в іншому місці.”
JTAG/SWD Інтерфейси апаратного зневадження, які надають зневаджувачу змогу зупинити процесор, перевірити пам’ ять і регістри, а також переглянути інструкції на фізичному мікросхемі.
- Приклад: « Підключіть зонд SWD до заголовка, і ми зможемо встановити точку зупинки прямо на обробнику помилок. » *
Звичайні фрази
** В обзорах коду: **
- «Ця ISR робить обчислення з плаваючою комою — це занадто дорого для контексту переривання; пересунути його в головний цикл»
- «Ми не вимикаємо переривання навколо цього спільного доступу до буфера, тому існує умова гонки з перериванням завершення DMA»
- “Ви перевірили лист з помилками для цієї версії чипа? Є відомий кремнієвий баґ з цим периферійним годинниковим воротами»
В стоячих позах:
- «Я провів вчора, щоб підняти новий датчик над SPI — час виглядав правильно на логічному аналізаторі, але я все ще бачу сміття на першому байті»
- «Сегодня я збираюся розділити мікропрограму, щоб знайти, який запит впровадив скасування brown-out, яке ми бачимо при холодному запуску»
- «Я закінчив логіку відновлення завантажувача; якщо новий образ не перевершить його контрольну суму, він повернеться до попереднього відомого образу.»
** У зустрічах синхронізації апаратного/ програмного забезпечення: **
- “Може, ми отримаємо оновлену схему? Пін 14 на роз’ємі не відповідає тому, що є в поточній версії плати»
- «Ми бачимо перервані скидання, які корелюють з запуском двигуна — чи можемо ми перевірити, чи це проблема з рейкою живлення або тригером охоронця прошивки?»
- “У таблиці даних зазначено, що цей регістр є тільки для запису, але нам потрібно прочитати налаштований стан десь для діагностики.”
Фрази, яких слід уникати
**Скажуть “програма зламалася” через помилку в прошивці. ** У вбудованих контекстах, « аварія » є неясним. Люди, які говорять на рідній мові, використовують більш точні терміни: « пристрій зазнав критичної помилки », « він викликав скасування системи спостереження » або « він увійшов у нескінченний цикл у програмі обробки помилок ». Точність у цьому випадку допомагає колегам з апаратного забезпечення точно зрозуміти стан плати.
Скажите “Я подключил отладчик к чипу”, когда вы имеете в виду отладочный зонд. « Зневаджувач » — це програмне забезпечення, яке запущено на вашому комп’ ютері (наприклад, GDB або IDE виробника); « зонд » або « адаптер » (наприклад, J- Link або ST- Link) — це фізичне обладнання, яке з’ єднує ваш комп’ ютер з призначенням. Скажіть: « Я приєднав зонд зневадження до цілі і запустив сеанс зневадження. »
Скажи “сбросить дошку”, коли ти маєш на увазі щось більш конкретне. Існує кілька різних видів: «сброс при включенні», «сброс програмного забезпечення» (запускається прошивкою), «сброс сторожового собаки» і «сброс при виході з ладу» (запускається падінням напруги). Правильне названня збереже вашим колегам значний час діагностики.
Краткий справочник
| Term | How to use it |
|---|---|
| bootloader | ”The bootloader checks a CRC before jumping to the application.” |
| ISR | ”Keep ISRs short and defer heavy work to the main loop.” |
| debounce | ”We debounce the button in software with a 20ms window.” |
| watchdog | ”The watchdog resets the board if the main loop stalls.” |
| bit-banging | ”We’re bit-banging this protocol since no hardware peripheral is free.” |
| JTAG/SWD | ”Attach the SWD probe and set a breakpoint at the fault handler.” |
Ключеві моменти
- Словник програмного забезпечення поєднує апаратні терміни (реєстр, периферія, рейка) з програмними термінами (переривання, watchdog, ISR) — використовуйте обидва терміни.
- Ясно розрізняти типи скидання (включення живлення, програмне забезпечення, watchdog, brown- out), а не просто говорити « скидання ».
- Відокремте зневаджувач (програмне забезпечення) від зонда зневаджування (апаратне забезпечення) під час опису ваших налаштувань.
- У описах ISR слід вказувати, що відбувається у контексті переривання у порівнянні з головним циклом — це часто обговорюється під час перегляду коду.
- Коли щось не працює, описуйте спостережуваний симптом точно (серйозна помилка, нескінченна петля, зависання), а не просто « аварія »
Розрізняють: практичний підхід
Будьмо чесними; розробка прошивки часто включає в себе певну кількість неоднозначності і розбіжностей. Точність, яка вимагає низькорівневого коду, не завжди гладко перекладається на розмовну англійську. Як інженери, ми повинні чітко сформулювати наші міркування, особливо при обговоренні потенційних проблем з колегами або документування змін. Однією з ключових областей є навігація розбіжностей - чи це різні інтерпретації результатів тестів, суперечливі припущення про поведінку регістрів, або просто нерозуміння впливу зміни. Ефективне оформлення цих обговорень має вирішальне значення для співпраці і запобігання дорогим переробкам.
Поширений сценарій під час перегляду коду. Уявіть, що ви отримали коментар на кшталт: «Я не зовсім впевнений, чому ви встановили вектор переривання для SPI на 0x10. Документація свідчить, що вона повинна бути вирівняна з картою пам’яті. Негайна реакція може бути оборонною, але добре структурована відповідь, зосереджена на * ясності * і демонстрації розуміння основної проблеми, є набагато ефективнішою. Замість того, щоб сказати «Я не розумію», спробуйте щось на зразок: «Це хороша точка зору — я покладався на внутрішню документацію, яка не була оновлена, щоб відобразити останні зміни карти пам’ яті. Дозвольте мені дослідити вирівнювання вектора переривання SPI; чи могли б ви надати посилання на остаточну специфікацію?» Ключовим у цьому випадку є визнання потенційної невідповідності, продемонстрування бажання вчитися і запрошення до співпраці.
Крім того, точна мова уникає неправильного тлумачення. Сказати, що «система зламалася», неоднозначно. Замість цього, намагайтеся бути конкретними: « Завантажувач не виконав команду після завершення процесу запуску, що призвело до жорсткого скасування ». Цей рівень деталізації негайно надає контекст і дозволяє іншим зрозуміти масштаб проблеми. Аналогічно, при описі запропонованої зміни, уникайте таких термінів, як «виправлення» — це означає дефект, де його може не існувати. Замість цього використовуйте такі фрази, як « підвищити продуктивність » або « поліпшити надійність ». Ясне спілкування зменшує неоднозначність і спрощує процес зневадження. Пам’ ятайте, документація є ключем; послідовна термінологія створює спільне розуміння у команді.
І нарешті, не бійтеся задати прояснюючі питання рано. Набагато краще витратити п’ять хвилин на підтвердження припущення, ніж години на переслідування непорозуміння, якого можна було уникнути. Проактивне опитування демонструє увагу до деталей і прихильність до точності.
Ось приклад того, як ви можете скористатися grep для пошуку певного значення регістру у бінарному файлі під час зневадження:
grep -B2 -A2 '0x12345678' bootloader.bin
За допомогою цієї команди буде виконано пошук у файлі bootloader.bin випадків шістнадцяткової адреси 0x12345678 і буде надруковано два рядки перед і два рядки після кожного збігу, що надає контекст навколо значення регістру. Це демонструє практичне застосування словника, пов’ язаного з двійковим аналізом і налаштуванням апаратного забезпечення.