Jedinica 6 / 12

Umjetna inteligencija u ugrađenim sustavima i razvoju firmvera

Dobici:

  • Sposobnost ubrzavanja skeleta firmvera mikrokontrolera, upravljačkog programa i stroja stanja pomoću AI
  • Mogućnost pregleda prekida, vremena, nadzornog psa i logike niske potrošnje s AI podrškom
  • Sposobnost provjere firmverskog koda generiranog umjetnom inteligencijom putem statičke analize, testiranja hardvera i sigurnosnih zahtjeva

Ugrađeni sustav je elektronički uređaj izgrađen oko mikrokontrolera (malo računalo koje sadrži procesor, memoriju i periferne uređaje na jednom čipu) dizajniran za obavljanje određenog posla: termostat, modem, senzorski čvor, pokretač motora. Firmware je softver koji izravno pokreće hardver ovog uređaja. U ovoj ćete jedinici vidjeti kako koristiti AI kao akcelerator u razvoju firmvera (pisanje upravljačkog programa, stanje stroja, logika prekida i vremena, upravljanje niskom potrošnjom energije). AI je stvarno moćan u kodiranju; Ali u ugrađenom svijetu kod je isprepleten s hardverom, stvarnim vremenom i često sigurnošću. Dakle, svaka linija koju AI proizvodi mora proći kroz statičku analizu, provjeru registra/podatkovne tablice i stvarno testiranje u hardveru.

Gdje je jako, gdje je riskantno u AI firmware-u

AI je vrlo jak na "kostur" i "die" dio firmvera: struktura I2C/SPI drajvera, okvir stroja stanja (logika koja definira stanja i prijelaze uređaja), implementacija prstenastog međuspremnika, parser instrukcija, testni kostur. Može čitati tablicu registara u složenoj podatkovnoj tablici i generirati inicijalizacijski kod. Može objasniti pogrešku, protumačiti upozorenje prevoditelja.

Ono gdje je rizično je bit ugrađenog sustava:

  • Adrese registra i bitna polja: AI može pogrešno zapamtiti mapu registra čipa; Svaka adresa i bit moraju biti verificirani iz podatkovne tablice.
  • Vrijeme i stvarno vrijeme: Koliko mikrosekundi traje operacija, koliko često dolazi prekid, ovisi o hardveru; AI predviđa, vi mjerite.
  • Konkurentnost: Ako varijable koje dijele rutina usluge prekida (ISR) i glavna petlja nisu zaštićene nestabilnim i atomskim pristupom, pojavljuju se tihe, neponovljive pogreške.
  • Ograničenja resursa: prelijevanje stoga, curenje memorije, istek vremena čuvara znači rušenje ugrađenog.

Prekid, mjerenje vremena i pas čuvar

Prekid je kada se dogodi događaj (podaci su stigli, mjerač vremena je istekao), procesor napušta glavni posao i prelazi na servisnu rutinu (ISR: Interrupt Service Routine). ISR-ovi su najosjetljiviji dijelovi koda u ugrađenom sustavu. Osnovna pravila: ISR bi trebao biti kratak (dug rad je prepušten glavnoj petlji), u njemu ne bi trebalo biti blokirajućih operacija (čekanje, ispis), zajedničke varijable bi trebale biti zaštićene.

Watchdog je sigurnosni mehanizam koji automatski ponovno pokreće uređaj ako se softver sruši; Firmware ga redovito "hrani", ako ne, sustav se resetira. Umjetna inteligencija izrađuje nacrte ovih struktura, ali trajanje nadzornog psa, prioriteti prekida i proračun za zakazivanje moraju se potvrditi u odnosu na stvarno opterećenje vašeg sustava.

Savjet: Kada ispisujete ISR u AI, izričito ga uputite da "drži ISR ​​kratkim, bez blokiranja, označite zajedničke varijable s volatile i atomičnim pristupom, delegirajte dugi posao glavnoj petlji s oznakom." Zatim provjerite redak po redak u kodu koji proizvodi jesu li ta pravila stvarno primijenjena.

Mala snaga i sigurnost

Upravljanje niskom potrošnjom energije ključno je za uređaje koji se napajaju baterijama: stavljanje procesora u stanje mirovanja, isključivanje perifernih uređaja, buđenje s događajem. AI skicira prijelaze u način mirovanja i logiku buđenja, ali stvarna trenutna potrošnja poznata je samo mjerenjem (mjerač struje na razini mikroampera); AI kaže da "u ovom načinu rada troši ~2 µA" je nagađanje.

Iz sigurnosne perspektive, ugrađeni uređaji sve su više umreženi, a ranjivosti firmvera (prelijevanje međuspremnika, neautentificirani unos, slaba kriptografija, otvoreno sučelje za otklanjanje pogrešaka) predstavljaju ozbiljne rizike. AI vas može podsjetiti na načela sigurnog kodiranja, ali sigurnost generiranog koda provjeravaju se alatima za statičku analizu, pregledom koda i sigurnosnim testiranjem kada je potrebno. U sustavima koji su kritični za sigurnost (medicinski, automobilski, industrijski) izlaz umjetne inteligencije nikada ne bi trebao zamijeniti procese koje zahtijeva odobrenje nadležnog inženjera i relevantni sigurnosni standard (npr. IEC 61508, ISO 26262).

tri mini kućišta

Slučaj 1 — Nezaštićena zajednička varijabla. Inženjer traži UART prijemni kod od AI. Kod povećava brojač u ISR-u i glavna petlja čita taj brojač; ali brojač nije nepostojan i višebajtno čitanje nije atomsko. Uređaj radi većinu vremena, ali povremeno pogrešno očitava broj podataka i greška se ne može ponoviti. Statička analiza i pregled koda hvataju nestalan nedostatak; Greška nestaje kada je brojač zaštićen. Lekcija: pogreške paralelnosti su česte i podmukle u AI kodu; Potrebno je pročitati i provjeriti.

Slučaj 2 — pogrešan bit registra. Pripravnik učitava ADC inicijalizacijski kod koji je generirao AI; ADC očitava neočekivane vrijednosti. Uspoređujući ga s podatkovnom tablicom, čini se da je AI postavio konfiguracijski bit na pogrešno mjesto (mapa za drugu varijantu čipa). Nakon što je bit ispravljen, ADC radi ispravno. Lekcija: provjerite pravopis svakog registra u odnosu na točnu varijantu podatkovne tablice.

Slučaj 3 — Ispravna uporaba. Inženjer traži od umjetne inteligencije kostur stroja stanja za složeni senzorski protokol; opisuje stanja, prijelaze i grane vremenskog ograničenja. AI proizvodi čist, čitljiv okvir. Inženjer uzima ovaj okvir, provjerava pristup svakom registru s podatkovnom tablicom, mjeri vremena osciloskopom i testira ga u hardveru. Razvoj je gotov za nekoliko sati umjesto za nekoliko dana. Lekcija: AI ubrzava kostur; Inženjer provodi provjeru.

Predlošci upita koji se mogu kopirati

PREDLOŽAK KOSTURA UPRAVLJAČKOG DRIVERA"Napišite kostur [I2C/SPI/UART] upravljačkog programa za [čip/periferija]: inicijalizacija, čitanje, pisanje, funkcije rukovanja pogreškama. Ostavite adrese registara i bitna polja u PLACEHOLDER (npr. REG_XXX) i zabilježite 'popunite ih i provjerite iz podatkovne tablice'. Koristite timeout umjesto blockingwait. Odredite što svaka funkcija pretpostavlja pomoću redak komentara."

ISR SIGURNOSNI PREDLOŽAK "Napišite nacrt rutine usluge prekida (ISR) za sljedeći događaj: [događaj]. Pravila: Neka ISR bude kratak, ne blokirajte, označite zajedničke varijable s vivolatile i atomičnim pristupom, delegirajte dugi posao glavnoj petlji s oznakom. Na kraju koda, navedite gdje se svako od ovih pravila primjenjuje kako bih mogao provjeriti."

PREDLOŽAK STROJA STANJA "Napišite kostur stroja stanja za sljedeći protokol/proces: [opišite stanja, događaje, prijelaze i isteke vremena]. Navedite radnje ulaza/izlaska i granu pogreške/vremena čekanja za svako stanje. Ostavite vrijednosti specifične za hardver (registar, trajanje) kao rezervirana mjesta i imajte na umu da ih je potrebno potvrditi."

PREDLOŽAK ZA PREGLED KODA "Proučite sljedeći kod firmvera iz ugrađene perspektive i označite rizike: nezaštićena zajednička varijabla (hlapljiva/atomičnost), duga/blokirajuća operacija u ISR-u, rizik od prekoračenja stoga, čekanje bez vremenskog ograničenja, pogreške u registru, feed nadzornog psa. Predložite kako da testiram/potvrdim svaki nalaz. Kod: [zalijepi]."

Slab upit / Jak upit

SLABI PROMPT: "Napišite mi UART driver."

SNAŽAN UPUTSTVO: "Napišite okvir upravljačkog programa UART primanja temeljen na prekidima za [mikrokontroler]. Upotrijebite prstenasti međuspremnik; neka ISR bude kratak i samo pišite u međuspremnik, obrađujući u glavnoj petlji. Učinite dijeljene indekse promjenljivima i atomarnima. Ostavite adrese registara u rezerviranim mjestima, označite ih za provjeru iz podatkovne tablice. Na kraju koda navedite što trebam testirati u smislu konkurentnosti i vremena."

Slab prompt proizvodi kod koji je slijep za hardver i konkurentnost; Moćni prompt nameće ugrađena pravila i upite za popis za provjeru.

Slojevi verifikacije firmvera

sloj

što hvata

Uloga AI

Provjera podatkovne tablice

Pogrešan registar/bit

Generira rezervirano mjesto i kontrolnu bilješku

Statička analiza (linter)

volatile, type, granične pogreške

Popis pravila i objašnjenje

Upozorenja kompilatora

Implicitna konverzija, neiskorištena vrijednost

Komentar upozorenja

Testiranje u hardveru

Vrijeme, stvarno ponašanje

Prijedlog scenarija testiranja

Osciloskop/analizator

Točnost signala i protokola

Mjerna točka i očekivani val

Oprez: Samo zato što se firmware "kompilira" i "radi većinu vremena" ne znači da je ispravan. Pogreške istovremenosti i vremenskog određivanja javljaju se samo pod određenim uvjetima; Zato su statička analiza i stvarno testiranje u hardveru neizostavni.

Uobičajene greške

  • Ne štiti zajedničke varijable. Podaci između ISR-a i glavne petlje moraju biti nepostojani i atomski.
  • Ne provjerava se adresa registra/bit s podatkovnom tablicom. AI može mapirati pogrešnu varijantu.
  • Zadržavanje dugog ISR-a ili blokiranje unutar njega. Sustav ne može odgovoriti, prekidi su propušteni.
  • Pretpostavka mjerenja vremena bez mjerenja. Stvarno vrijeme ovisi o hardveru; provjeren osciloskopom.
  • Ostavljanje sigurnosnog/sigurnosno kritičnog koda za odobrenje AI. Kompetentan inženjer i odgovarajući standardni proces su ključni.

Ukratko

U ovoj ste jedinici koristili AI kao snažan akcelerator u generiranju kostura firmvera, upravljačkog programa, stroja stanja i ISR ​​skice. Ali u ugrađenom svijetu, kod je isprepleten s hardverom, stvarnim vremenom i sigurnošću: vrijednosti registra/bita provjeravaju se iz podatkovne tablice, paralelnost se provjerava iz statičke analize, vrijeme se provjerava iz osciloskopa, ponašanje se provjerava iz stvarnog testiranja u hardveru. AI isporučuje kostur za nekoliko minuta; Inženjer provjerava da firmware radi ispravno, sigurno i na vrijeme. U sustavima kritičnim za sigurnost, izlaz umjetne inteligencije ne zamjenjuje procese relevantnih sigurnosnih standarda i odobrenje nadležnog inženjera.

Zadatak aplikacije

Odaberite periferni uređaj (npr. I2C senzor). Uz predložak "kostur vozača", zatražite od umjetne inteligencije kostur vozača koji ostavlja registre u rezerviranim mjestima. Zatim generirajte ISR skicu za prekid spreman za podatke od ovog senzora s predloškom "ISR sigurnost". Na kraju, skenirajte kod koji proizvodi s predloškom "Pregled koda" za ugrađene rizike i napišite najmanje tri koraka provjere/testiranja.

popis za provjeru

  • [ ] Provjerio sam svaku adresu registra i bit iz ispravne varijante podatkovne tablice.
  • [ ] Učinio sam zajedničke varijable između ISR-a i glavne petlje promjenjivim i atomskim.
  • [ ] Držao sam ISR kratkim, nisam stavio blokiranje, predao sam dugi posao glavnoj petlji.
  • [ ] Planirao sam testirati vrijeme i stvarno ponašanje u hardveru i s osciloskopom.
  • [ ] Skenirao sam kôd sa statičkom analizom i upozorenjima prevoditelja.
  • [ ] Prepustio sam sigurnosne/sigurnosno kritične dijelove odobrenju nadležnog inženjera i relevantnom standardnom procesu.