Enota 6 / 12

Umetna inteligenca v vgrajenih sistemih in razvoju vdelane programske opreme

Dobički:

  • Zmožnost pospeševanja osnutkov vdelane programske opreme mikrokrmilnika, gonilnikov in stanja stroja z AI
  • Možnost pregleda prekinitve, časovnega razporeda, nadzornega psa in logike nizke porabe energije s podporo AI
  • Zmožnost preverjanja kode vdelane programske opreme, ustvarjene z AI, s pomočjo statične analize, testiranja strojne opreme in varnostnih zahtev

Vgrajeni sistem je elektronska naprava, zgrajena okoli mikrokrmilnika (majhnega računalnika, v katerem so procesor, pomnilnik in zunanje naprave na enem čipu), zasnovana za opravljanje določenega dela: termostat, modem, senzorsko vozlišče, gonilnik motorja. Vdelana programska oprema je programska oprema, ki neposredno poganja strojno opremo te naprave. V tej enoti boste videli, kako uporabiti AI kot pospeševalnik pri razvoju vdelane programske opreme (pisanje gonilnikov, avtomat stanja, prekinitev in časovna logika, upravljanje nizke porabe energije). AI je res močan pri kodiranju; Toda v vgrajenem svetu je koda prepletena s strojno opremo, realnim časom in pogosto varnostjo. Torej mora vsaka vrstica, ki jo proizvede AI, skozi statično analizo, preverjanje registra/podatkovnega lista in dejansko testiranje strojne opreme.

Kje je močno, kje je tvegano pri vdelani programski opremi AI

Umetna inteligenca je zelo močna pri "skeletnem" in "matričnem" delu vdelane programske opreme: struktura gonilnika I2C/SPI, ogrodje državnega stroja (logika, ki definira stanja in prehode naprave), implementacija medpomnilnika obroča, razčlenjevalnik navodil, testni skelet. Lahko prebere tabelo registrov v kompleksnem podatkovnem listu in ustvari inicializacijsko kodo. Zna razložiti napako, interpretirati opozorilo prevajalnika.

Kjer je tvegano, je bistvo vgrajenega sistema:

  • Naslovi registra in bitna polja: AI si lahko napačno zapomni zemljevid registra čipa; Vsak naslov in bit je treba preveriti na podatkovnem listu.
  • Čas in realni čas: Koliko mikrosekund traja operacija, kako pogosto pride do prekinitve, je odvisno od strojne opreme; AI napoveduje, vi merite.
  • Sočasnost: če spremenljivke, ki si jih delita prekinitvena servisna rutina (ISR) in glavna zanka, niso zaščitene z nestanovitnim in atomskim dostopom, pride do tihih, neponovljivih napak.
  • Omejitve virov: prekoračitev sklada, uhajanje pomnilnika, časovna omejitev nadzornega psa pomeni zrušitev vdelanega.

Prekinitev, čas in čuvaj

Prekinitev je, ko pride do dogodka (podatki so prispeli, časovnik je potekel), procesor opusti glavno opravilo in preskoči na servisno rutino (ISR: Interrupt Service Routine). ISR-ji so najbolj občutljivi deli kode v vgrajenem sistemu. Osnovna pravila: ISR naj bo kratek (dolgo delo je prepuščeno glavni zanki), v njem ne sme biti blokirnih operacij (počakaj, tiskaj), spremenljivke v skupni rabi morajo biti zaščitene.

Watchdog je varnostni mehanizem, ki samodejno znova zažene napravo, če se programska oprema zruši; Firmware ga redno "hrani", če ne, se sistem ponastavi. Umetna inteligenca pripravi osnutke teh struktur, vendar je treba trajanje nadzornega psa, prioritete prekinitev in proračun za razporejanje potrditi glede na dejansko obremenitev vašega sistema.

Namig: Ko tiskate ISR v AI, mu izrecno naročite, naj "naj bo ISR kratek, brez blokiranja, spremenljivke v skupni rabi označite z nestanovitnim in atomičnim dostopom, dolgo opravilo delegirajte glavni zanki z zastavico." Nato preverite vrstico za vrstico v kodi, ki jo ustvari, ali so ta pravila dejansko uporabljena.

Nizka moč in varnost

Upravljanje nizke porabe je ključnega pomena pri napravah, ki se napajajo iz baterij: preklop procesorja v stanje spanja, izklop zunanjih naprav, prebujanje z dogodkom. Umetna inteligenca skicira prehode v način mirovanja in logiko prebujanja, vendar je dejanska poraba toka znana le z meritvijo (merilnik toka na ravni mikroamperov); Umetna inteligenca pravi, da "v tem načinu porabi ~2 µA", je ugibanje.

Z varnostnega vidika so vgrajene naprave vedno bolj povezane v omrežje in ranljivosti vdelane programske opreme (prekoračitev medpomnilnika, nepreverjen vnos, šibka kriptografija, odprt vmesnik za odpravljanje napak) so resna tveganja. Umetna inteligenca vas lahko spomni na načela varnega kodiranja, vendar je varnost ustvarjene kode po potrebi preverjena z orodji za statično analizo, pregledom kode in varnostnim testiranjem. V sistemih, ki so kritični za varnost (medicinski, avtomobilski, industrijski), umetna inteligenca nikoli ne sme nadomestiti procesov, ki jih zahtevata odobritev pristojnega inženirja in ustrezni varnostni standard (npr. IEC 61508, ISO 26262).

trije mini kovčki

Primer 1 – Nezaščitena spremenljivka v skupni rabi. Inženir od AI zahteva kodo za sprejem UART. Koda poveča števec v ISR in glavna zanka ta števec prebere; vendar števec ni nestanoviten in večbajtno branje ni atomsko. Naprava večino časa deluje, vendar občasno napačno prebere štetje podatkov in napake ni več mogoče ponoviti. Statična analiza in pregled kode zaznata manjkajočo nestabilnost; Napaka izgine, ko je števec zaščiten. Lekcija: napake sočasnosti so pogoste in zahrbtne v kodi AI; Treba je prebrati in preveriti.

Primer 2 — Napačen bit registra. Pripravnik naloži inicializacijsko kodo ADC, ki jo ustvari AI; ADC bere nepričakovane vrednosti. Če ga primerjamo s podatkovnim listom, se zdi, da je AI konfiguracijski bit nastavil na napačno lokacijo (zemljevid za drugo različico čipa). Ko je bit popravljen, ADC deluje pravilno. Lekcija: preverite črkovanje vsakega registra glede na pravilno različico podatkovnega lista.

3. primer – pravilna uporaba. Inženir zahteva AI za okostje državnega stroja za kompleksen senzorski protokol; opisuje stanja, prehode in veje časovne omejitve. AI ustvari čist, berljiv okvir. Inženir vzame to ogrodje, preveri vsak dostop do registra s podatkovnim listom, izmeri čase z osciloskopom in ga preizkusi v strojni opremi. Razvoj je končan v nekaj urah namesto v nekaj dneh. Lekcija: AI pospeši okostje; Inženir opravi preverjanje.

Kopirane predloge pozivov

PREDLOGA OKOSTJA GONILNIKA "Napišite okostje gonilnika [I2C/SPI/UART] za [čip/periferijo]: inicializacija, branje, pisanje, funkcije za obravnavanje napak. Pustite naslove registrov in bitna polja v PLACEHOLDER (npr. REG_XXX) in zabeležite 'izpolnite in preverite jih s podatkovnega lista'. Uporabite časovno omejitev namesto blockingwait. Določite, kaj vsaka funkcija prevzame z vrstica za komentar."

VARNOSTNA PREDLOGA ISR "Napišite osnutek prekinitvene storitvene rutine (ISR) za naslednji dogodek: [dogodek]. Pravila: ISR naj bo kratek, ne blokirajte, spremenljivke v skupni rabi označite z vivolatilnim in atomičnim dostopom, dolgo opravilo prenesite v glavno zanko z zastavico. Na koncu kode navedite, kje velja vsako od teh pravil, da lahko preverim."

PREDLOGA STANJSKEGA STROJA "Napišite okostje stroja stanja za naslednji protokol/proces: [opišite stanja, dogodke, prehode in časovne omejitve]. Določite vstopna/izstopna dejanja in vejo napake/časovne omejitve za vsako stanje. Pustite vrednosti, specifične za strojno opremo (registracija, trajanje), kot ogradne oznake in upoštevajte, da jih je treba preveriti."

PREDLOGA ZA PREGLED KODE "Preglejte naslednjo kodo vdelane programske opreme z vidika vdelane programske opreme in označite tveganja: nezaščitena spremenljivka v skupni rabi (hlapnost/atomičnost), dolgotrajna/blokirna operacija v ISR, tveganje prelivanja sklada, čakanje brez časovne omejitve, napake v registru, pas čuvaj. Predlagajte, kako naj testiram/preverim vsako ugotovitev. Koda: [prilepi]."

Šibek poziv/močan poziv

ŠIBEK POZIV: "Napišite mi gonilnik UART."

MOČEN POZIV: "Napišite ogrodje gonilnika za sprejem UART na podlagi prekinitev za [mikrokrmilnik]. Uporabite obročni medpomnilnik; naj bo ISR kratek in samo pišite v medpomnilnik, obdelujte v glavni zanki. Naredite skupne indekse nestanovitne in atomske. Pustite naslove registrov v nadomestnih oznakah, označite jih, da se preverijo iz podatkovnega lista. Na koncu kode navedite, kaj moram preizkusiti v smislu sočasnosti in časa."

Šibek poziv ustvari kodo, ki je slepa za strojno opremo in sočasnost; Zmogljiv poziv vsiljuje vdelana pravila in pozive za seznam za preverjanje.

Plasti preverjanja vdelane programske opreme

plast

kaj ujame

Vloga AI

Preverjanje podatkovnega lista

Napačen register/bit

Ustvari ogrado in nadzorno opombo

Statična analiza (linter)

volatile, tip, mejne napake

Seznam pravil in razlaga

Opozorila prevajalnika

Implicitna pretvorba, neuporabljena vrednost

Opozorilni komentar

Testiranje v strojni opremi

Čas, dejansko vedenje

Predlog testnega scenarija

Osciloskop/analizator

Natančnost signala in protokola

Merilna točka in pričakovani val

Pozor: Samo zato, ker se vdelana programska oprema "prevaja" in "deluje večino časa", še ne pomeni, da je pravilna. Napake sočasnosti in časovne napake se pojavijo samo pod določenimi pogoji; Zato sta statična analiza in realno testiranje strojne opreme nepogrešljiva.

Pogoste napake

  • Ne ščiti spremenljivk v skupni rabi. Podatki med ISR in glavno zanko morajo biti nestanovitni in atomski.
  • Ne preverjam naslova registra/bita s podatkovnim listom. AI lahko preslika napačno različico.
  • Ohranjanje dolgega ISR ali blokiranje znotraj njega. Sistem se ne more odzvati, prekinitve so zgrešene.
  • Ob predpostavki merjenja časa brez merjenja. Dejanski čas je odvisen od strojne opreme; preverjeno z osciloskopom.
  • Puščanje varnostne/varnostno kritične kode za odobritev AI. Bistvena sta kompetenten inženir in ustrezni standardni proces.

Če povzamem

V tej enoti ste uporabili AI kot močan pospeševalnik pri generiranju okostja vdelane programske opreme, gonilnika, stanja stroja in skice ISR. Toda v vgrajenem svetu je koda prepletena s strojno opremo, realnim časom in varnostjo: vrednosti registrov/bitov so preverjene iz podatkovnega lista, sočasnost je preverjena s statično analizo, časovna razporeditev je preverjena z osciloskopom, obnašanje je preverjeno z dejanskim testiranjem strojne opreme. AI dostavi okostje v nekaj minutah; Inženir preveri, ali vdelana programska oprema deluje pravilno, varno in pravočasno. V sistemih, ki so kritični za varnost, izhod umetne inteligence ne nadomesti procesov ustreznega varnostnega standarda in odobritve pristojnega inženirja.

Aplikacijska naloga

Izberite periferno napravo (npr. senzor I2C). S predlogo »okostje gonilnika« prosite AI za okostje gonilnika, ki pušča registre v ogradah. Nato ustvarite skico ISR za prekinitev, pripravljeno za podatke, s tega senzorja s predlogo "ISR security". Nazadnje skenirajte kodo, ki jo ustvari, s predlogo »Pregled kode« za vdelana tveganja in napišite vsaj tri korake preverjanja/testiranja.

kontrolni seznam

  • [ ] Preveril sem vsak naslov registra in bit iz pravilne različice podatkovnega lista.
  • [ ] Spremenljivke v skupni rabi med ISR in glavno zanko sem naredil volatilne in atomske.
  • [ ] ISR sem ohranil kratko, nisem postavil blokade, dolgo delo sem predal glavni zanki.
  • [ ] Načrtoval sem preizkusiti čas in dejansko obnašanje v strojni opremi in z osciloskopom.
  • [ ] Kodo sem skeniral s statično analizo in opozorili prevajalnika.
  • [ ] Varnostno/varnostno kritične dele sem prepustil odobritvi pristojnega inženirja in ustreznemu standardnemu postopku.