Печалби:
- Възможност за ускоряване на скелета на фърмуера на микроконтролера, драйвера и чертежите на държавната машина с AI
- Възможност за преглед на прекъсване, синхронизация, пазач и логика с ниска мощност с поддръжка на AI
- Възможност за проверка на генерирания от AI код на фърмуера чрез статичен анализ, тестване на хардуер и изисквания за сигурност
Вградената система е електронно устройство, изградено около микроконтролер (малък компютър, в който са разположени процесорът, паметта и периферните устройства на един чип), проектирано да изпълнява специфична работа: термостат, модем, сензорен възел, двигателен драйвер. Фърмуерът е софтуерът, който директно управлява хардуера на това устройство. В този модул ще видите как да използвате AI като ускорител при разработването на фърмуер (писане на драйвери, държавна машина, логика за прекъсване и синхронизиране, управление на ниска мощност). AI е наистина мощен в кодирането; Но във вградения свят кодът е преплетен с хардуер, реално време и често сигурност. Така че всеки ред, който AI произвежда, трябва да премине през статичен анализ, проверка на регистър/лист с данни и действително тестване в хардуера.
Къде е силно, къде е рисковано в AI фърмуера
AI е много силен по отношение на частта „скелет“ и „умрица“ на фърмуера: структурата на I2C/SPI драйвер, рамката на държавна машина (логиката, която дефинира състоянията и преходите на устройството), имплементация на пръстенов буфер, анализатор на инструкции, тестов скелет. Той може да чете таблицата на регистъра в сложен лист с данни и да генерира код за инициализация. Може да обясни грешка, да интерпретира предупреждение на компилатора.
Там, където е рисковано, е същността на вградената система:
- Адреси на регистъра и битови полета: AI може да запомни погрешно картата на регистъра на чипа; Всеки адрес и бит трябва да бъдат проверени от листа с данни.
- Време и реално време: Колко микросекунди отнема една операция, колко често пристига прекъсване зависи от хардуера; AI прогнозира, вие измервате.
- Паралелност: Ако променливите, споделени между рутинната услуга за прекъсване (ISR) и основния цикъл, не са защитени от променлив и атомен достъп, възникват тихи, неповтарящи се грешки.
- Ограничения на ресурсите: Препълване на стека, изтичане на памет, таймаут на watchdog означава срив във вградения.
Прекъсване, синхронизация и пазач
Прекъсването е, когато възникне събитие (данните са пристигнали, таймерът е изтекъл), процесорът изоставя основната задача и преминава към сервизна рутина (ISR: Interrupt Service Routine). ISR са най-чувствителните парчета код във вградената система. Основни правила: ISR трябва да е кратък (дългата работа е оставена на главния цикъл), в него не трябва да има блокиращи операции (изчакване, печат), споделените променливи трябва да бъдат защитени.
Watchdog е защитен механизъм, който автоматично рестартира устройството, ако софтуерът се срине; Фърмуерът го "храни" редовно, ако не, системата се нулира. AI изготвя тези структури, но продължителността на контролното устройство, приоритетите на прекъсванията и бюджетът за планиране трябва да бъдат валидирани спрямо действителното натоварване на вашата система.
Съвет: Когато отпечатвате ISR към AI, изрично го инструктирайте да "пази ISR кратък, без блокиране, маркирайте споделени променливи с непостоянен и атомен достъп, делегирайте дългата работа на главния цикъл с флаг." След това проверете ред по ред в кода, който създава, дали тези правила действително се прилагат.
Ниска мощност и сигурност
Управлението на ниска мощност е от решаващо значение при устройствата, захранвани от батерии: поставяне на процесора в режим на заспиване, изключване на периферни устройства, събуждане със събитие. AI скицира преходите в режим на заспиване и логиката за събуждане, но действителната консумация на ток се знае само чрез измерване (токомер на ниво микроампер); Изкуственият интелект казва, че „извлича ~2 µA в този режим“ е предположение.
От гледна точка на сигурността, вградените устройства са все по-мрежови и уязвимостите на фърмуера (препълване на буфер, неудостоверено въвеждане, слаба криптография, отворен интерфейс за отстраняване на грешки) са сериозни рискове. AI може да ви напомня за принципите за безопасно кодиране, но сигурността на генерирания код се проверява чрез инструменти за статичен анализ, преглед на кода и тестване за сигурност, когато е необходимо. В критични за безопасността системи (медицински, автомобилни, промишлени) изходът на AI никога не трябва да замества процесите, изисквани от одобрението на компетентен инженер и съответния стандарт за безопасност (напр. IEC 61508, ISO 26262).
три мини калъфа
Случай 1 — Незащитена споделена променлива. Инженер изисква код за получаване на UART от AI. Кодът увеличава брояч в ISR и главният цикъл чете този брояч; но броячът не е непостоянен и многобайтовото четене не е атомарно. Устройството работи през повечето време, но понякога разчита погрешно броя на данните и грешката не може да се повтори. Статичният анализ и прегледът на кода улавят липсваща нестабилност; Грешката изчезва, когато броячът е защитен. Урок: грешките при паралелност са чести и коварни в AI кода; Необходимо е да се прочете и провери.
Случай 2 — Грешен бит в регистъра. Стажант качва кода за инициализация на ADC, генериран от AI; ADC чете неочаквани стойности. Сравнявайки го с листа с данни, изглежда, че AI е задал конфигурационен бит на грешно място (карта за различен вариант на чипа). След като битът бъде коригиран, ADC работи правилно. Урок: проверете правописа на всеки регистър спрямо правилния вариант на листа с данни.
Случай 3 — Правилна употреба. Инженер пита AI за скелет на държавна машина за сложен сензорен протокол; описва състояния, преходи и клонове за изчакване. AI създава чиста, четлива рамка. Инженерът взема тази рамка, проверява достъпа до всеки регистър с листа с данни, измерва времената с осцилоскоп и го тества в хардуера. Разработката завършва за няколко часа вместо за няколко дни. Урок: AI ускорява скелета; Инженерът извършва проверката.
Копируеми шаблони за подкана
ШАБЛОН НА СКЕЛЕТ НА ДРАЙВЕР "Напишете скелета на [I2C/SPI/UART] драйвер за [чип/периферия]: инициализация, четене, запис, функции за обработка на грешки. Оставете регистрационните адреси и битовите полета в PLACEHOLDER (напр. REG_XXX) и отбележете „попълнете ги и ги проверете от листа с данни". Използвайте изчакване вместо blockingwait. Посочете какво приема всяка функция с ред за коментар."
ISR ШАБЛОН ЗА СИГУРНОСТ "Напишете чернова на рутинна услуга за прекъсване (ISR) за следното събитие: [събитие]. Правила: Поддържайте ISR кратък, не блокирайте, маркирайте споделени променливи с vivolatile и атомен достъп, делегирайте дългата работа на главния цикъл с флаг. В края на кода посочете къде се прилага всяко от тези правила, за да мога да проверя."
ШАБЛОН НА СЪСТОЯТЕЛНА МАШИНА "Напишете скелет на машина за състояние за следния протокол/процес: [опишете състояния, събития, преходи и изчаквания]. Посочете действия за влизане/излизане и клон за грешка/изчакване за всяко състояние. Оставете специфични за хардуера стойности (регистрация, продължителност) като заместители и имайте предвид, че те трябва да бъдат проверени."
ШАБЛОН ЗА ПРЕГЛЕД НА КОДА „Разгледайте следния код на фърмуера от вградена гледна точка и маркирайте рискове: незащитена споделена променлива (нестабилна/атомарност), дълга/блокираща операция в ISR, риск от препълване на стека, изчакване без изчакване, грешки при регистриране, канал за наблюдение. Предложете как трябва да тествам/потвърдя за всяко откритие. Код: [поставете].“
Слаба подкана / Силна подкана
СЛАБА ПОДКАНА: „Напишете ми UART драйвер.“
СИЛНА ПОДСКАЗКА: "Напишете базирана на прекъсване рамка на драйвер за получаване на UART за [микроконтролер]. Използвайте пръстен буфер; дръжте ISR кратък и просто пишете в буфера, обработвайки в главния цикъл. Направете споделените индекси непостоянни и атомарни. Оставете адресите на регистрите в контейнери, маркирайте ги, за да бъдат проверени от листа с данни. В края на кода избройте какво трябва да тествам по отношение на едновременност и време."
Слабата подкана създава код, който е сляп за хардуер и едновременност; Мощната подкана налага вградени правила и подкани за списъка за проверка.
Слоеве за проверка на фърмуера
слой
какво хваща
Ролята на AI
Проверка на листа с данни
Грешен регистър/бит
Генерира контейнер и контролна бележка
Статичен анализ (линтер)
летливи, тип, гранични грешки
Списък с правила и обяснение
Предупреждения на компилатора
Неявно преобразуване, неизползвана стойност
Предупредителен коментар
Тестване в хардуера
Време, действително поведение
Предложение за тестов сценарий
Осцилоскоп/анализатор
Сигнал и точност на протокола
Точка на измерване и очаквана вълна
Внимание: Само защото фърмуерът се „компилира“ и „работи през повечето време“ не означава, че е правилен. Грешки в паралелността и времето се появяват само при определени условия; Ето защо статичният анализ и реалното тестване в хардуера са незаменими.
Често срещани грешки
- Не защитава споделени променливи. Данните между ISR и главния контур трябва да са непостоянни и атомарни.
- Не се проверява адрес/бит на регистър с лист с данни. AI може да картографира грешния вариант.
- Поддържане на ISR дълго или блокиране в него. Системата не може да отговори, пропускат се прекъсвания.
- Приемане на времето без измерване. Реалното време зависи от хардуера; проверени с осцилоскоп.
- Оставяне на критичен за сигурността код за одобрение от AI. Компетентният инженер и съответният стандартен процес са от съществено значение.
В обобщение
В този модул сте използвали AI като мощен ускорител при генериране на скелет на фърмуера, драйвер, държавна машина и ISR скица. Но във вградения свят кодът е преплетен с хардуера, реалното време и сигурността: стойностите на регистъра/битовете се проверяват от листа с данни, паралелността се проверява от статичен анализ, времето се проверява от осцилоскопа, поведението се проверява от реално тестване в хардуера. AI доставя скелета за минути; Инженерът проверява дали фърмуерът работи правилно, сигурно и навреме. В критични за безопасността системи изходът на AI не замества процесите на съответния стандарт за безопасност и одобрението на компетентен инженер.
Задача за приложение
Изберете периферно устройство (напр. I2C сензор). С шаблона „драйвер скелет“ помолете AI за драйверен скелет, който оставя регистри в контейнери. След това генерирайте ISR скица за готовото за данни прекъсване от този сензор с шаблона "ISR сигурност". Накрая сканирайте кода, който произвежда с шаблона „Преглед на кода“ за вградени рискове и напишете поне три стъпки за проверка/тестване.
контролен списък
- [ ] Проверих всеки регистърен адрес и бит от правилния вариант на листа с данни.
- [ ] Направих споделените променливи между ISR и главния цикъл летливи и атомни.
- [ ] Поддържах ISR кратък, не поставих блокиране, предадох дългата работа на главния контур.
- [ ] Планирах да тествам времето и действителното поведение в хардуера и с осцилоскоп.
- [ ] Сканирах кода със статичен анализ и предупреждения на компилатора.
- [ ] Оставих критичните за сигурността/безопасността части на одобрението на компетентен инженер и съответния стандартен процес.