Eenheid 6 / 12

Kunstmatige intelligentie in ingebedde systemen en firmware-ontwikkeling

Winst:

  • Mogelijkheid om het skelet, het stuurprogramma en de staatsmachineontwerpen van microcontrollerfirmware te versnellen met AI
  • Mogelijkheid om interrupt-, timing-, watchdog- en low-power-logica te beoordelen met AI-ondersteuning
  • Mogelijkheid om door AI gegenereerde firmwarecode te verifiëren door middel van statische analyse, testen op hardware en beveiligingsvereisten

Een ingebed systeem is een elektronisch apparaat gebouwd rond een microcontroller (een kleine computer waarin de processor, het geheugen en de randapparatuur op één chip zijn ondergebracht) die is ontworpen om een ​​specifieke taak uit te voeren: een thermostaat, een modem, een sensorknooppunt, een motoraansturing. Firmware is de software die rechtstreeks de hardware van dit apparaat aanstuurt. In dit onderdeel zul je zien hoe je AI kunt gebruiken als versneller bij de ontwikkeling van firmware (schrijven van stuurprogramma's, statusmachine, interrupt- en timinglogica, laag energiebeheer). AI is erg krachtig in het coderen; Maar in de embedded wereld is code verweven met hardware, realtime en vaak ook beveiliging. Elke regel die de AI produceert moet dus een statische analyse, register-/datasheetcontrole en daadwerkelijke hardwaretests ondergaan.

Waar is sterk, waar is riskant in AI-firmware

AI is erg sterk op het ‘skelet’- en ‘die’-gedeelte van de firmware: de structuur van een I2C/SPI-driver, het raamwerk van een toestandsmachine (de logica die de toestanden en overgangen van het apparaat definieert), een ringbufferimplementatie, een instructieparser, een testskelet. Het kan de registertabel in een complex gegevensblad lezen en initialisatiecode genereren. Kan een fout verklaren, een compilerwaarschuwing interpreteren.

Waar het riskant is, is de essentie van het embedded systeem:

  • Registeradressen en bitvelden: AI kan de registerkaart van een chip verkeerd onthouden; Elk adres en bit moet worden geverifieerd op basis van het gegevensblad.
  • Timing en realtime: Hoeveel microseconden een bewerking duurt, hoe vaak een interrupt arriveert, hangt af van de hardware; AI voorspelt, jij meet.
  • Gelijktijdigheid: als variabelen die worden gedeeld tussen de interrupt service routine (ISR) en de hoofdlus niet worden beschermd door vluchtige en atomaire toegang, treden er stille, niet-herhaalbare fouten op.
  • Resourcelimieten: Stack-overflow, geheugenlek, watchdog-time-out betekent crashen in embedded.

Interrupt, timing en waakhond

Een interrupt is wanneer er een gebeurtenis plaatsvindt (data aangekomen, timer verlopen), de processor de hoofdtaak verlaat en naar een serviceroutine springt (ISR: Interrupt Service Routine). ISR's zijn de meest gevoelige stukjes code in het embedded systeem. Basisregels: ISR moet kort zijn (lang werk wordt overgelaten aan de hoofdlus), er mogen geen blokkerende bewerkingen (wachten, afdrukken) in zitten, gedeelde variabelen moeten worden beschermd.

Watchdog is een beveiligingsmechanisme dat het apparaat automatisch opnieuw opstart als de software crasht; De firmware "voedt" deze regelmatig, zo niet, dan wordt het systeem gereset. De AI stelt deze structuren op, maar de watchdog-duur, interruptprioriteiten en het planningsbudget moeten worden gevalideerd aan de hand van de daadwerkelijke belasting van uw systeem.

Tip: Wanneer u een ISR naar de AI afdrukt, instrueer hem dan expliciet om "de ISR kort te houden, geen blokkering, gedeelde variabelen te markeren met vluchtige en atomaire toegang, de lange taak te delegeren aan de hoofdlus met een vlag." Controleer vervolgens regel voor regel in de code die wordt geproduceerd of deze regels daadwerkelijk worden toegepast.

Laag stroomverbruik en veiligheid

Laag energiebeheer is van cruciaal belang bij apparaten die op batterijen werken: de processor in de sluimerstand zetten, randapparatuur uitschakelen, wakker worden met een gebeurtenis. AI schetst overgangen in de slaapmodus en ontwaaklogica, maar het werkelijke stroomverbruik is alleen bekend door meting (stroommeter op microampèreniveau); De AI die zegt "in deze modus verbruikt ~2 µA" is een gok.

Vanuit veiligheidsperspectief zijn ingebedde apparaten steeds vaker verbonden met een netwerk en vormen kwetsbaarheden in de firmware (bufferoverflow, niet-geverifieerde invoer, zwakke cryptografie, open debug-interface) ernstige risico's. AI herinnert u misschien aan veilige codeerprincipes, maar de veiligheid van de gegenereerde code wordt indien nodig geverifieerd door statische analysehulpmiddelen, codebeoordeling en beveiligingstests. In veiligheidskritische systemen (medisch, automobiel, industrieel) mag AI-output nooit de processen vervangen die vereist zijn door de goedkeuring van bevoegde ingenieurs en de relevante veiligheidsnorm (bijv. IEC 61508, ISO 26262).

drie minikoffers

Geval 1 – Onbeveiligde gedeelde variabele. Een ingenieur vraagt ​​een UART-ontvangstcode aan bij de AI. De code verhoogt een teller in de ISR en de hoofdlus leest deze teller; maar de teller is niet vluchtig en het lezen van multibytes is niet atomair. Het apparaat werkt meestal, maar af en toe leest het de gegevenstelling verkeerd en kan de fout niet worden herhaald. Statische analyse en codebeoordeling vangen ontbrekende vluchtige elementen op; De fout verdwijnt zodra de teller beveiligd is. Les: gelijktijdigheidsfouten komen vaak voor en zijn verraderlijk in AI-code; Het is noodzakelijk om te lezen en te verifiëren.

Geval 2 — Verkeerde registerbit. Een stagiair uploadt de ADC-initialisatiecode die door de AI is gegenereerd; ADC leest onverwachte waarden. Als je het vergelijkt met de datasheet, lijkt het erop dat de AI een configuratiebit op de verkeerde locatie heeft ingesteld (kaart voor een andere variant van de chip). Zodra het bit is gecorrigeerd, werkt de ADC correct. Les: verifieer elke registerspelling aan de hand van de juiste variant van het gegevensblad.

Geval 3 — Correct gebruik. Een ingenieur vraagt ​​de AI om een ​​toestandsmachineskelet voor een complex sensorprotocol; beschrijft toestanden, overgangen en time-outtakken. AI produceert een schoon, leesbaar raamwerk. De ingenieur neemt dit raamwerk, verifieert elke registertoegang met de datasheet, meet de timings met een oscilloscoop en test deze in hardware. De ontwikkeling is binnen een paar uur voltooid in plaats van een paar dagen. Les: AI versnelt het skelet; De ingenieur voert de verificatie uit.

Kopieerbare promptsjablonen

DRIVER SKELETON TEMPLATE "Schrijf het skelet van een [I2C/SPI/UART] driver voor [chip/randapparaat]: initialisatie, lezen, schrijven, foutafhandelingsfuncties. Laat registeradressen en bitvelden achter in PLACEHOLDER (bijv. REG_XXX) en noteer 'vul ze in en verifieer ze vanuit het gegevensblad'. Gebruik time-out in plaats van blockingwait. Specificeer wat elke functie aanneemt met een commentaarregel."

ISR SECURITY TEMPLATE "Schrijf een interrupt service routine (ISR) concept voor de volgende gebeurtenis: [gebeurtenis]. Regels: Houd de ISR kort, blokkeer niet, markeer gedeelde variabelen met vivolatile en atomaire toegang, delegeer de lange taak naar de hoofdlus met een vlag. Specificeer aan het einde van de code waar elk van deze regels van toepassing is, zodat ik kan verifiëren. "

STATE MACHINE SJABLOON "Schrijf een state machine-skelet voor het volgende protocol/proces: [beschrijf staten, gebeurtenissen, overgangen en time-outs]. Specificeer entry/exit-acties en fout/time-out-vertakking voor elke status. Laat hardware-specifieke waarden (register, duur) als tijdelijke aanduidingen staan ​​en merk op dat ze moeten worden geverifieerd."

CODE REVIEW TEMPLATE "Bekijk de volgende firmwarecode vanuit een ingebed perspectief en markeer risico's: onbeschermde gedeelde variabele (vluchtig/atomiciteit), lange/blokkerende werking in ISR, risico op stackoverflow, wachten zonder time-out, registreer fouten, watchdog-feed. Stel voor hoe ik voor elke bevinding moet testen/verifiëren. Code: [plakken]."

Zwakke prompt/sterke prompt

ZWAKKE PROMPT: "Schrijf mij een UART-stuurprogramma."

STERKE PROMPT: "Schrijf een op interrupts gebaseerd UART-ontvangstdriverframework voor [microcontroller]. Gebruik een ringbuffer; houd de ISR kort en schrijf gewoon naar de buffer, verwerking in de hoofdlus. Maak gedeelde indexen vluchtig en atomair. Laat registeradressen achter in tijdelijke aanduidingen, markeer ze om te worden geverifieerd in de datasheet. Aan het einde van de code vermeldt u wat ik moet testen in termen van gelijktijdigheid en timing."

Een zwakke prompt produceert code die hardware- en gelijktijdigheidsblind is; De krachtige prompt legt ingebedde regels en aanwijzingen voor de verificatielijst op.

Firmwareverificatielagen

laag

wat vangt

De rol van AI

Gegevensbladcontrole

Verkeerd register/bit

Genereert tijdelijke aanduiding en controlenotitie

Statische analyse (linter)

vluchtige, type, grensfouten

Regellijst en uitleg

Compilerwaarschuwingen

Impliciete conversie, ongebruikte waarde

Waarschuwing commentaar

Testen op hardwaregebied

Timing, feitelijk gedrag

Suggestie voor testscenario

Oscilloscoop/analysator

Signaal- en protocolnauwkeurigheid

Meetpunt en verwachte golf

Let op: het feit dat een firmware "compileert" en "meestal werkt", betekent niet dat deze correct is. Gelijktijdigheids- en timingfouten komen alleen onder bepaalde omstandigheden voor; Daarom zijn statische analyses en echte testen in hardware onmisbaar.

Veel voorkomende fouten

  • Geen bescherming van gedeelde variabelen. Gegevens tussen de ISR en de hoofdlus moeten vluchtig en atomair zijn.
  • Registeradres/bit wordt niet geverifieerd met datasheet. AI kan de verkeerde variant in kaart brengen.
  • De ISR lang houden of daarin blokkeren. Het systeem kan niet reageren, interrupts worden gemist.
  • Uitgaan van timing zonder te meten. De werkelijke tijd is afhankelijk van de hardware; geverifieerd met een oscilloscoop.
  • Beveiligings-/veiligheidskritieke code achterlaten voor AI-goedkeuring. Een competente engineer en het relevante standaardproces zijn essentieel.

Samengevat

In deze unit gebruikte je AI als een krachtige versneller bij het genereren van een firmwareskelet, driver, statusmachine en ISR-schets. Maar in de ingebedde wereld is code verweven met hardware, realtime en beveiliging: register-/bitwaarden worden geverifieerd op basis van de datasheet, gelijktijdigheid wordt geverifieerd op basis van statische analyse, timing wordt geverifieerd op basis van de oscilloscoop, gedrag wordt geverifieerd op basis van echte tests in hardware. AI levert het skelet binnen enkele minuten; De engineer controleert of de firmware correct, veilig en op tijd werkt. In veiligheidskritische systemen vervangt AI-output niet de relevante veiligheidsnormprocessen en de goedkeuring van bevoegde ingenieurs.

Applicatie taak

Selecteer een randapparaat (bijvoorbeeld een I2C-sensor). Met de sjabloon ‘driver skeleton’ vraag je de AI om een ​​driver skeleton dat registers in tijdelijke aanduidingen achterlaat. Genereer vervolgens een ISR-schets voor de data-ready interrupt van deze sensor met de sjabloon "ISR security". Scan ten slotte de code die het produceert met de sjabloon "Code review" op ingebedde risico's en schrijf minimaal drie verificatie-/teststappen.

controlelijst

  • [ ] Ik heb elk registeradres en bit van de juiste datasheetvariant geverifieerd.
  • [ ] Ik heb de gedeelde variabelen tussen de ISR en de hoofdlus vluchtig en atomair gemaakt.
  • [ ] Ik hield de ISR kort, plaatste geen blokkering en droeg de lange taak over aan de hoofdlus.
  • [ ] Ik was van plan de timing en het daadwerkelijke gedrag in hardware en met een oscilloscoop te testen.
  • [ ] Ik heb de code gescand met statische analyse en compilerwaarschuwingen.
  • [ ] Ik heb de beveiligings-/veiligheidskritische onderdelen overgelaten aan de goedkeuring van een competente ingenieur en het relevante standaardproces.