одиниця 6 / 12

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

Прибуток:

  • Можливість прискорити скелет прошивки мікроконтролера, драйвер і кінцевий автомат за допомогою AI
  • Можливість переглядати переривання, синхронізацію, сторожовий таймер і логіку низької потужності з підтримкою ШІ
  • Можливість перевірки створеного ШІ коду мікропрограми за допомогою статичного аналізу, тестування апаратного забезпечення та вимог безпеки

Вбудована система — це електронний пристрій, побудований навколо мікроконтролера (невеликого комп’ютера, який містить процесор, пам’ять і периферійні пристрої на одному чіпі), призначеного для виконання певної роботи: термостат, модем, сенсорний вузол, драйвер двигуна. Прошивка – це програмне забезпечення, яке безпосередньо запускає апаратне забезпечення цього пристрою. У цьому розділі ви побачите, як використовувати штучний інтелект як прискорювач у розробці мікропрограм (написання драйвера, кінцевий автомат, логіка переривань і синхронізації, керування низьким енергоспоживанням). ШІ справді потужний у кодуванні; Але у вбудованому світі код переплітається з апаратним забезпеченням, реальним часом і часто безпекою. Таким чином, кожен рядок, створений штучним інтелектом, повинен пройти статичний аналіз, перевірку реєстру/таблиці даних і фактичне тестування апаратного забезпечення.

Де сильніше, де ризиковано в мікропрограмному забезпеченні ШІ

Штучний інтелект дуже сильний у «скелетній» і «кришковій» частинах мікропрограми: структурі драйвера I2C/SPI, структурі кінцевого автомата (логіка, яка визначає стани та переходи пристрою), реалізації кільцевого буфера, аналізатору інструкцій, тестовому скелету. Він може читати таблицю реєстрів у складній таблиці даних і генерувати код ініціалізації. Може пояснити помилку, інтерпретувати попередження компілятора.

Де це ризиковано, це суть вбудованої системи:

  • Регістрові адреси та бітові поля: штучний інтелект може неправильно запам’ятати регістрову карту чіпа; Кожна адреса та біт повинні бути перевірені з таблиці даних.
  • Час і реальний час: скільки мікросекунд займає операція, як часто надходить переривання, залежить від апаратного забезпечення; ШІ передбачає, ви вимірюєте.
  • Одночасність: якщо змінні, які спільно використовуються між програмою обслуговування переривань (ISR) і основним циклом, не захищені непостійним і атомарним доступом, виникають тихі, неповторювані помилки.
  • Обмеження ресурсів: переповнення стека, витік пам’яті, тайм-аут сторожового тайм-ауту означає збій у вбудованій системі.

Переривання, синхронізація та сторожовий таймер

Переривання — це коли відбувається подія (дані надійшли, таймер закінчився), процесор відмовляється від основного завдання та переходить до процедури обслуговування (ISR: Interrupt Service Routine). ISR є найбільш чутливими фрагментами коду у вбудованій системі. Основні правила: ISR має бути коротким (тривала робота залишається в основному циклі), в ньому не повинно бути блокуючих операцій (очікування, друк), загальні змінні повинні бути захищені.

Watchdog — це механізм безпеки, який автоматично перезавантажує пристрій у разі збою програмного забезпечення; Прошивка його регулярно «годує», якщо ні, система скидається. Штучний інтелект створює проекти цих структур, але тривалість сторожового таймера, пріоритети переривань і бюджет планування мають перевірятися на відповідність фактичному навантаженню вашої системи.

Порада: друкуючи ISR на AI, чітко вказуйте йому «зберігати ISR коротким, без блокування, позначати спільні змінні непостійним і атомарним доступом, делегувати довге завдання головному циклу за допомогою прапора». Потім перевірте рядок за рядком створеного ним коду, чи дійсно ці правила застосовуються.

Низька потужність і безпека

Управління низьким енергоспоживанням має вирішальне значення для пристроїв, що живляться від батареї: переведення процесора в режим сну, вимкнення периферійних пристроїв, пробудження за допомогою події. ШІ малює переходи в сплячий режим і логіку пробудження, але фактичне споживання струму відомо лише шляхом вимірювання (лічильник струму на рівні мікроамперів); ШІ каже, що "він споживає ~2 мкА в цьому режимі" - це припущення.

З точки зору безпеки, вбудовані пристрої все частіше об’єднуються в мережу, а вразливість вбудованого програмного забезпечення (переповнення буфера, неавтентифікований вхід, слабка криптографія, відкритий інтерфейс налагодження) є серйозною загрозою. Штучний інтелект може нагадувати вам про принципи безпечного кодування, але безпека згенерованого коду перевіряється за допомогою інструментів статичного аналізу, перевірки коду та тестування безпеки, якщо це необхідно. У критично важливих для безпеки системах (медичних, автомобільних, промислових) вихід штучного інтелекту ніколи не повинен замінювати процеси, необхідні за схваленням компетентного інженера та відповідним стандартом безпеки (наприклад, IEC 61508, ISO 26262).

три міні-чохла

Випадок 1 — незахищена спільна змінна. Інженер запитує код отримання UART від ШІ. Код збільшує лічильник в ISR, і основний цикл зчитує цей лічильник; але лічильник не є мінливим, а багатобайтове читання не є атомарним. Пристрій працює більшу частину часу, але іноді він неправильно зчитує дані, і помилка не може повторитися. Статичний аналіз і перегляд коду виявляють відсутність мінливості; Помилка зникає, коли лічильник захищений. Урок: помилки паралелізму є частими та підступними в коді ШІ; Треба прочитати і перевірити.

Випадок 2 — Неправильний біт регістра. Стажер завантажує код ініціалізації АЦП, згенерований ШІ; АЦП зчитує несподівані значення. Порівнюючи його з таблицею даних, виявляється, що AI встановив біт конфігурації в неправильне місце (карта для іншого варіанту чіпа). Коли біт виправлено, АЦП працює правильно. Урок: перевірте написання кожного реєстру з правильним варіантом таблиці даних.

Випадок 3 — Правильне використання. Інженер запитує у ШІ скелет кінцевої машини для складного протоколу датчика; описує стани, переходи та гілки тайм-ауту. AI створює чисту, читабельну структуру. Інженер бере цей фреймворк, перевіряє доступ до кожного реєстру за допомогою таблиці даних, вимірює таймінги за допомогою осцилографа та перевіряє його на апаратному забезпеченні. Розробка завершується не за кілька днів, а за кілька годин. Урок: AI прискорює скелет; Перевірку проводить інженер.

Шаблони підказок, які можна копіювати

ШАБЛОН СКЕЛЕТА ДРАЙВЕРА"Напишіть скелет драйвера [I2C/SPI/UART] для [чіпа/периферії]: ініціалізація, читання, запис, функції обробки помилок. Залиште адреси реєстрів і бітові поля в PLACEHOLDER (наприклад, REG_XXX) і зверніть увагу на "заповнити та перевірити їх із таблиці даних". Використовуйте тайм-аут замість blockingwait. Укажіть, що передбачає кожна функція, за допомогою рядок коментаря».

ШАБЛОН БЕЗПЕКИ ISR "Напишіть чернетку програми обслуговування переривання (ISR) для такої події: [подія]. Правила: Зберігайте ISR коротким, не блокуйте, позначайте спільні змінні vivolatile та атомарним доступом, передайте довгу роботу основному циклу за допомогою прапорця. У кінці коду вкажіть, де кожне з цих правил застосовується, щоб я міг перевірити."

ШАБЛОН АВТОМАТА СТАНОВ "Напишіть каркас кінцевого автомата для наступного протоколу/процесу: [опишіть стани, події, переходи та тайм-аути]. Укажіть дії входу/виходу та гілку помилок/тайм-ауту для кожного стану. Залиште значення апаратного забезпечення (реєстр, тривалість) як заповнювачі та зауважте, що їх потрібно перевірити."

ШАБЛОН ПЕРЕГЛЯДУ КОДУ «Вивчіть наступний код вбудованого програмного забезпечення з точки зору вбудованого програмного забезпечення та позначте ризики: незахищена спільна змінна (незалежна/атомарність), тривала/блокуюча операція в ISR, ризик переповнення стека, очікування без тайм-ауту, помилки реєстрації, сторожовий канал. Запропонуйте, як мені перевірити/перевірити кожне відкриття. Код: [вставити].»

Слабка підказка / Сильна підказка

СЛАБКИЙ ЗАПИТ: «Напишіть мені драйвер UART».

ВАЖЛИВА ПІДКАЗКА: «Напишіть структуру драйвера прийому UART на основі переривань для [мікроконтролера]. Використовуйте кільцевий буфер; тримайте ISR коротким і просто записуйте в буфер, обробляючи в основному циклі. Зробіть спільні індекси мінливими та атомарними. Залиште адреси реєстрів у заповнювачах, позначте їх для перевірки з таблиці даних. Наприкінці коду вкажіть, що мені потрібно перевірити з точки зору паралельності та часу».

Слабка підказка створює код, який не підтримує апаратне забезпечення та паралелізм; Потужна підказка накладає вбудовані правила та підказки для списку перевірки.

Рівні перевірки мікропрограми

шар

що ловить

Роль ШІ

Перевірка паспорту

Неправильний регістр/біт

Створює заповнювач і контрольну примітку

Статичний аналіз (лінтер)

volatile, тип, граничні помилки

Перелік правил і пояснення

Попередження компілятора

Неявне перетворення, невикористане значення

Попереджувальний коментар

Тестування в апаратному забезпеченні

Час, реальна поведінка

Пропозиція тестового сценарію

Осцилограф/аналізатор

Точність сигналу та протоколу

Точка вимірювання та очікувана хвиля

Застереження: те, що мікропрограма «компілюється» і «працює більшу частину часу», не означає, що вона правильна. Помилки паралельності та часу виникають лише за певних умов; Ось чому статичний аналіз і реальне тестування апаратного забезпечення є незамінними.

Поширені помилки

  • Не захищає спільні змінні. Дані між ISR і основним циклом мають бути непостійними та атомарними.
  • Не перевіряється адреса/біт регістра з таблицею даних. ШІ може відобразити неправильний варіант.
  • Зберігання ISR довгим або блокування в ньому. Система не може відповісти, переривання пропускаються.
  • Припущення часу без вимірювання. Фактичний час залежить від обладнання; перевіряється за допомогою осцилографа.
  • Залишення критично важливого для безпеки коду для затвердження ШІ. Компетентний інженер і відповідний стандартний процес є важливими.

Підсумовуючи

У цьому модулі ви використовували штучний інтелект як потужний прискорювач для генерації скелета прошивки, драйвера, кінцевого автомата та ескізу ISR. Але у вбудованому світі код пов’язаний із апаратним забезпеченням, реальним часом і безпекою: значення регістра/біта перевіряються з таблиці даних, паралелізм перевіряється за допомогою статичного аналізу, синхронізація перевіряється за допомогою осцилографа, поведінка перевіряється за допомогою реального тестування апаратного забезпечення. AI доставляє скелет за лічені хвилини; Інженер перевіряє, чи мікропрограма працює правильно, безпечно та вчасно. У критично важливих для безпеки системах вихід ШІ не замінює відповідні процеси стандарту безпеки та схвалення компетентного інженера.

Аплікаційне завдання

Виберіть периферійний пристрій (наприклад, датчик I2C). За допомогою шаблону «скелет драйвера» попросіть ШІ створити каркас драйвера, який залишає регістри в заповнювачах. Потім згенеруйте ескіз ISR для переривання готовності даних від цього датчика за допомогою шаблону «ISR security». Зрештою, відскануйте створений ним код за допомогою шаблону «Перегляд коду» на наявність вбудованих ризиків і запишіть принаймні три етапи перевірки/тестування.

контрольний список

  • [ ] Я перевірив кожну адресу та біт кожного реєстру з правильного варіанту таблиці даних.
  • [ ] Я зробив спільні змінні між ISR і основним циклом непостійними та атомарними.
  • [ ] Я тримав ISR коротким, не ставив блокування, передав довгу роботу головному шлейфу.
  • [ ] Я планував перевірити час і фактичну поведінку апаратного забезпечення та за допомогою осцилографа.
  • [ ] Я просканував код зі статичним аналізом і попередженнями компілятора.
  • [ ] Я залишив критично важливі для безпеки частини на схвалення компетентного інженера та відповідного стандартного процесу.