Pelnas:
- Galimybė pagreitinti mikrovaldiklio programinės įrangos skeletą, tvarkyklės ir būsenos mašinos juodraščius naudojant AI
- Galimybė peržiūrėti pertraukų, laiko, stebėjimo ir mažos galios logiką su AI palaikymu
- Galimybė patikrinti dirbtinio intelekto sukurtą programinės įrangos kodą atliekant statinę analizę, aparatinės įrangos testavimą ir saugos reikalavimus
Įterptoji sistema yra elektroninis įrenginys, pastatytas aplink mikrovaldiklį (mažą kompiuterį, kuriame yra procesorius, atmintis ir išoriniai įrenginiai viename luste), skirtas atlikti tam tikrą darbą: termostatas, modemas, jutiklio mazgas, variklio tvarkyklė. Firmware yra programinė įranga, kuri tiesiogiai paleidžia šio įrenginio aparatinę įrangą. Šiame skyriuje pamatysite, kaip dirbtinį intelektą naudoti kaip greitintuvą kuriant programinę-aparatinę įrangą (tvarkyklės rašymas, būsenos mašina, pertraukimų ir laiko logika, mažos galios valdymas). AI yra tikrai galingas koduojant; Tačiau įterptajame pasaulyje kodas yra susipynęs su aparatine įranga, realiuoju laiku ir dažnai saugumu. Taigi kiekviena AI sukurta eilutė turi atlikti statinę analizę, registro / duomenų lapo patikrinimą ir faktinį aparatinės įrangos testavimą.
Kur stipri, kur rizikinga AI programinė įranga
AI yra labai stiprus programinės įrangos „skeleto“ ir „mirties“ dalyse: I2C/SPI tvarkyklės struktūra, būsenos mašinos struktūra (logika, apibrėžianti įrenginio būsenas ir perėjimus), žiedinio buferio įgyvendinimas, instrukcijų analizatorius, bandomasis skeletas. Jis gali nuskaityti registro lentelę sudėtingame duomenų lape ir generuoti inicijavimo kodą. Gali paaiškinti klaidą, interpretuoti kompiliatoriaus įspėjimą.
Kur tai rizikinga, yra įterptosios sistemos esmė:
- Registrų adresai ir bitų laukai: AI gali klaidingai prisiminti lusto registro žemėlapį; Kiekvienas adresas ir bitas turi būti patikrinti iš duomenų lapo.
- Laikas ir realus laikas: kiek mikrosekundžių trunka operacija, kaip dažnai ateina pertraukimas, priklauso nuo aparatinės įrangos; AI prognozuoja, matuojate.
- Lygiagretumas: jei kintamieji, kuriais dalijamasi pertraukimo paslaugų rutina (ISR) ir pagrindinė kilpa, nėra apsaugoti nepastovios ir atominės prieigos, atsiranda tylių, nepakartojamų klaidų.
- Išteklių ribos: dėklo perpildymas, atminties nutekėjimas, stebėjimo programos skirtasis laikas reiškia, kad įterptasis įrenginys sugenda.
Pertraukimas, laikas ir sargyba
Pertraukimas yra tada, kai įvyksta įvykis (gauna duomenų, pasibaigia laikmačio galiojimo laikas), procesorius atsisako pagrindinio darbo ir pereina prie aptarnavimo rutinos (ISR: Interrupt Service Routine). ISR yra jautriausios įterptosios sistemos kodo dalys. Pagrindinės taisyklės: ISR turi būti trumpas (ilgas darbas paliekamas pagrindinei kilpai), joje neturi būti jokių blokavimo operacijų (laukti, spausdinti), bendrinami kintamieji turi būti apsaugoti.
„Watchdog“ yra saugos mechanizmas, kuris automatiškai paleidžia įrenginį iš naujo, jei programinė įranga sugenda; Programinė įranga ją „maitina“ reguliariai, jei ne, sistema iš naujo nustatoma. AI kuria šias struktūras, tačiau stebėjimo trukmė, pertraukimo prioritetai ir planavimo biudžetas turi būti patvirtinti atsižvelgiant į faktinę jūsų sistemos apkrovą.
Patarimas: spausdindami ISR į AI, aiškiai nurodykite, kad ISR būtų trumpas, neblokuotų, pažymėkite bendrinamus kintamuosius su nepastoviąja ir atomine prieiga, perduokite ilgą darbą pagrindinei kilpai naudodami vėliavėlę. Tada patikrinkite, ar šios taisyklės iš tikrųjų taikomos.
Maža galia ir saugumas
Mažos energijos valdymas yra labai svarbus akumuliatoriais maitinamiems įrenginiams: procesoriaus užmigdymas, periferinių įrenginių išjungimas, pabudimas su įvykiu. AI eskizuoja miego režimo perėjimus ir pažadinimo logiką, tačiau tikrasis srovės suvartojimas žinomas tik išmatuojant (srovės matuoklis mikroamperų lygyje); AI pasakymas „šiuo režimu sunaudoja ~2 µA“ yra spėjimas.
Saugumo požiūriu įterptieji įrenginiai vis dažniau prijungiami prie tinklo, o programinės įrangos pažeidžiamumas (buferio perpildymas, neautentifikuota įvestis, silpna kriptografija, atvira derinimo sąsaja) kelia rimtą pavojų. AI gali priminti saugaus kodavimo principus, tačiau sugeneruoto kodo saugumas patikrinamas statinės analizės įrankiais, kodo peržiūra ir prireikus saugumo testavimu. Saugumui svarbiose sistemose (medicinos, automobilių, pramonės) AI išvestis niekada neturėtų pakeisti procesų, kurių reikalaujama kompetentingo inžinieriaus patvirtinimo ir atitinkamo saugos standarto (pvz., IEC 61508, ISO 26262).
trys mini dėklai
1 atvejis – neapsaugotas bendrinamas kintamasis. Inžinierius prašo UART gavimo kodo iš AI. Kodas padidina skaitiklį ISR, o pagrindinė kilpa nuskaito šį skaitiklį; bet skaitiklis nėra nepastovus, o kelių baitų skaitymas nėra atominis. Įrenginys veikia didžiąją laiko dalį, tačiau kartais klaidingai nuskaito duomenų skaičių ir klaida negali pasikartoti. Statinės analizės ir kodo peržiūros trūkumo nepastovus; Klaida išnyksta, kai skaitiklis yra apsaugotas. Pamoka: lygiagretumo klaidos AI kode yra dažnos ir klastingos; Būtina perskaityti ir patikrinti.
2 atvejis – neteisingas registro bitas. Stažuotojas įkelia AI sugeneruotą ADC inicijavimo kodą; ADC nuskaito netikėtas reikšmes. Palyginus jį su duomenų lapu, atrodo, kad dirbtinis intelektas nustatė konfigūracijos bitą netinkamoje vietoje (skirtingo lusto varianto žemėlapis). Ištaisius bitą, ADC veikia tinkamai. Pamoka: patikrinkite kiekvieno registro rašybą pagal teisingą duomenų lapo variantą.
3 atvejis. Tinkamas naudojimas. Inžinierius prašo dirbtinio intelekto sudėtingo jutiklio protokolo būsenos mašinos skeleto; aprašomos būsenos, perėjimai ir skirtojo laiko atšakos. AI sukuria švarią, skaitomą sistemą. Inžinierius naudoja šią sistemą, patikrina kiekvieno registro prieigą naudodamas duomenų lapą, matuoja laiką osciloskopu ir išbando jį aparatinėje įrangoje. Kūrimas baigiamas per kelias valandas, o ne kelias dienas. Pamoka: AI pagreitina skeletą; Inžinierius atlieka patikrinimą.
Kopijuojami raginimo šablonai
DRIVER SKELETON TEMPLATE"Parašykite [I2C/SPI/UART] tvarkyklės skeletą [chip/peripheral]: inicijavimas, skaitymas, rašymas, klaidų apdorojimo funkcijos. Palikite registro adresų ir bitų laukus PLACEHOLDER (pvz., REG_XXX) ir pažymėkite "kiekvieną užpildykite ir patikrinkite, kokias funkcijas reikia naudoti blokuojant duomenis. su komentarų eilute“.
ISR SECURITY TEMPLATE"Parašykite nutraukimo paslaugų rutinos (ISR) juodraštį šiam įvykiui: [įvykis]. Taisyklės: laikykite trumpą ISR, neblokuokite, pažymėkite bendrinamus kintamuosius su nepastovia ir atomine prieiga, perduokite ilgą užduotį pagrindinei kilpai naudodami vėliavėlę. Kodo pabaigoje nurodykite, kur galioja kiekviena iš šių taisyklių, kad galėčiau patikrinti."
STATE MACHINE TEMPLATE"Parašykite būsenos mašinos griaučius šiam protokolui / procesui: [apibūdinkite būsenas, įvykius, perėjimus ir skirtąjį laiką]. Nurodykite kiekvienos būsenos įėjimo / išėjimo veiksmus ir klaidos / skirtojo laiko atšaką. Palikite konkrečios aparatinės įrangos reikšmes (registras, trukmė) kaip vietos rezervavimo ženklus ir atkreipkite dėmesį, kad jas reikia patikrinti.
KODO PERŽIŪROS ŠABLONAS „Išnagrinėkite šį programinės aparatinės įrangos kodą iš įterptosios perspektyvos ir pažymėkite riziką: neapsaugotas bendrinamas kintamasis (lakus/atomiškumas), ilgas/blokuojantis veikimas ISR, dėklo perpildymo rizika, laukimas be skirtojo laiko, registruojamos klaidos, stebėjimo kanalas. Pasiūlykite, kaip turėčiau išbandyti / patikrinti kiekvieną radinį. Kodas: [įklijuoti].
Silpnas raginimas / Stiprus raginimas
SILPNAS raginimas: „Parašykite man UART tvarkyklę“.
STIPRUS PROMPT: "Parašykite pertraukimu pagrįstą UART priėmimo tvarkyklės sistemą [mikrovaldikliui]. Naudokite skambėjimo buferį; laikykite trumpą ISR ir tiesiog rašykite į buferį, apdorodami pagrindinėje kilpoje. Padarykite bendrus indeksus nepastovius ir atominius. Palikite registro adresus rezervuotose vietose, pažymėkite, kad jie būtų patikrinti duomenų lape. Kodo pabaigoje man reikia testavimo terminų ir terminų."
Silpna raginimas sukuria kodą, kuris yra aklas aparatūrai ir lygiagrečiai; Galingas raginimas nustato įterptąsias taisykles ir raginimus patvirtinimo sąrašui.
Programinės įrangos patvirtinimo sluoksniai
sluoksnis
kas pagauna
AI vaidmuo
Duomenų lapo patikrinimas
Neteisingas registras/bitas
Sugeneruoja rezervuotą vietą ir kontrolinį užrašą
Statinė analizė (linter)
nepastovios, tipo, ribinės klaidos
Taisyklių sąrašas ir paaiškinimas
Kompiliatoriaus įspėjimai
Netiesioginė konversija, nepanaudota vertė
Įspėjamasis komentaras
Testavimas aparatinėje įrangoje
Laikas, tikras elgesys
Bandymo scenarijaus pasiūlymas
Osciloskopas/analizatorius
Signalo ir protokolo tikslumas
Matavimo taškas ir laukiama banga
Atsargiai: vien todėl, kad programinė įranga „kompiliuoja“ ir „veikia didžiąją laiko dalį“, dar nereiškia, kad ji teisinga. Lygiagretumo ir laiko klaidos atsiranda tik tam tikromis sąlygomis; Štai kodėl statinė analizė ir tikras aparatinės įrangos testavimas yra būtini.
Dažnos klaidos
- Neapsaugomi bendrinami kintamieji. Duomenys tarp ISR ir pagrindinės kilpos turi būti nepastovūs ir atominiai.
- Nepatvirtina registro adreso / bito su duomenų lapu. AI gali nustatyti netinkamą variantą.
- Išlaikyti ilgą ISR arba blokuoti jame. Sistema negali reaguoti, pertraukimai praleidžiami.
- Darant prielaidą, kad laikas be matavimo. Tikrasis laikas priklauso nuo techninės įrangos; patikrinta osciloskopu.
- Saugos / saugai svarbio kodo palikimas dirbtinio intelekto patvirtinimui. Kompetentingas inžinierius ir atitinkamas standartinis procesas yra būtini.
Apibendrinant
Šiame įrenginyje AI naudojote kaip galingą greitintuvą generuodami programinės įrangos skeletą, tvarkyklę, būsenos mašiną ir ISR eskizą. Tačiau įterptajame pasaulyje kodas yra susipynęs su aparatine įranga, realiuoju laiku ir saugumu: registro / bitų reikšmės tikrinamos iš duomenų lapo, sutapimas tikrinamas iš statinės analizės, laikas tikrinamas naudojant osciloskopą, elgsena tikrinama iš tikro aparatinės įrangos testavimo. AI pristato skeletą per kelias minutes; Inžinierius patikrina, ar programinė įranga veikia tinkamai, saugiai ir laiku. Saugumui svarbiose sistemose AI išvestis nepakeičia atitinkamo saugos standarto procesų ir kompetentingo inžinieriaus patvirtinimo.
Taikymo užduotis
Pasirinkite periferinį įrenginį (pvz., I2C jutiklį). Naudodami „vairuotojo skeleto“ šabloną paprašykite AI pateikti vairuotojo skeletą, kuris palieka registrus rezervuotose vietose. Tada sugeneruokite ISR eskizą, skirtą duomenims parengti pertraukti iš šio jutiklio naudodami „ISR saugos“ šabloną. Galiausiai nuskaitykite sukurtą kodą naudodami „Kodo peržiūros“ šabloną, ar nėra įterptųjų rizikų, ir parašykite bent tris patvirtinimo / testavimo veiksmus.
kontrolinis sąrašas
- [ ] Kiekvieną registro adresą ir bitą patikrinau iš tinkamo duomenų lapo varianto.
- [ ] Padariau bendrus kintamuosius tarp ISR ir pagrindinės kilpos nepastovius ir atominius.
- [ ] ISR laikiau trumpai, blokavimo nedėjau, ilgą darbą perdaviau pagrindinei kilpai.
- [ ] Planavau išbandyti laiką ir faktinį elgesį aparatinėje įrangoje ir su osciloskopu.
- [ ] Nuskaitau kodą su statine analize ir kompiliatoriaus įspėjimais.
- [ ] Saugumui / saugai svarbias dalis palikau kompetentingo inžinieriaus patvirtinimui ir atitinkamam standartiniam procesui.