Voitot:
- Kyky määritellä rekisteri-, keskeytys- ja ajoitusvaatimukset mikro-ohjaimelle selkeällä kehotuksella
- Mahdollisuus tarkistaa tekoälyn tuottama C/Arduino-koodi rekisteriasetusten, puskurin ylivuodon ja reaaliaikaisten rajoitusten suhteen
- Kyky soveltaa tapaa tarkistaa luotu koodi mittaamalla se laitteistolla (oskilloskooppi, sarjaportti)
Sulautetun järjestelmän kehitys on paikka, jossa ohjelmisto ja laitteisto leikkaavat: rekisteribitin väärin asettaminen, liian pitkä keskeytys tai puskurin ylivuoto aiheuttaa outoja, vaikeasti toistettavia vikoja kentällä, vaikka koodi "kääntyy" ja toimii. Tekoäly on todellinen kiihdytin tällä alalla; Se voi tuottaa alkurunkoja, laitteiston abstraktiofunktioita, tilakoneita ja viestintärutiineja. Mutta tekoäly ei näe korttisi datalehteä, ei tiedä kellotaajuuttasi eikä tunnista reaaliaikaisia rajoituksiasi. Tässä osiossa käydään läpi miten määritellään selkeästi mikro-ohjaimen toiminta tekoälylle, kuinka tarkistetaan luotu C/Arduino-koodi ja miksi kaikkea kannattaa mitata laitteistossa.
Vaatimuksen selkeä määrittäminen: Rekisteröinti, Leikkaus, Ajoitus
Tekoälyn käskeminen "sytytä LED" ei toimi; Mikä kortti, mikä pin, mikä kellotaajuus, mikä ajoitus? Kun määrität tekoälylle sulautetun tehtävän, käytä tätä kehystä: laitteisto (MCU-perhe, kello, pin), toiminto (mitä tapahtuu), rajoitus (ajoitus, teho, muisti) ja käyttöliittymä (rekisteri, HAL, Arduino-kirjasto).
Heikko kehote / Vahva kehote
HEIKKO: "Tuo PWM STM32:lla." (Tulos: mikä ajastin, mikä taajuus, mikä nasta on epäselvä; yleistä, luultavasti väärän rekisterinimen koodi.) VAHVA: "Tuottaa 20 kHz, 0-100 % säädettävä PWM TIM3 CH1:ssä (PA6) STM32F103:lle (72 MHz järjestelmäkello). Kirjoita rekisteritasolle (ei CALCULr2:n ja AAL:n kHRRATE-arvot). Kommenttirivillä - Aseta tehtävä funktioparametrilla välillä 0-100 - Kommentoi jokaista käyttämääsi rekisteribittiä.
Erona on, että tehokas kehote saa mallin näyttämään laskennan ja paljastamaan kello-oletuksen. Voit siis tarkistaa esiskaalaimen/ARR-arvot itsenäisesti:
20 kHz PWM (72 MHz kello): Ajastin_kello = 72 MHzJos haluamme esiskaalaimen = 72-1 → laskurikello = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49 Varmistus: 1e6 / (49+1) = 20 00 Hz
AI-koodin tarkastaminen: Mitä etsiä?
Se, että luotu koodi käännetään, ei tarkoita, että se toimii oikein. Noudata tätä tarkistuslistaa:
ohjausalue
Mitä etsiä
Rekisteri/bittiasetukset
Täsmälleen yhteensopiva tietolomakkeen kanssa, oikea bitimaski
Keskeytys (ISR)
Onko se lyhyt? Ei estoajan viivettä? Onko haihtuvaa käytetty?
puskuri/joukko
Onko rajavalvontaa? Ylivuodon vaara?
ajoitus
Viiveellä vai ajastimella? Noudatetaanko todellista aikarajoitusta?
Tyyppi ja leveys
8/16/32-bittinen ylivuoto, allekirjoitettu/allekirjoittamaton sekaannus
teho/vahtikoira
Äärettömän silmukan ruokintavahti?
Keskeytyspalvelurutiinit (ISR) ovat yleisin virheiden lähde. AI laittaa joskus delay():n tai pitkän silmukan ISR:n sisään. Tämä johtaa siihen, että muut keskeytykset jäävät huomaamatta ja vahtikoira nollautuu. Sääntö: ISR:n tulee olla mahdollisimman lyhyt; Päätehtävänä tulisi olla lipun asettaminen ja sen siirtäminen pääsilmukkaan.
// HEIKKO (AI tuottaa joskus tämän): ISR:n estotoiminto void TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; read_sensor(); // voi kestää kauan - BAD CASE_Delay(10); // viive ISR:ssä - VERY BAD }}// VAHVA: ISR lyhyt; työ siirtyy pääsilmukalle uint8_t tick_flag = 0; // haihtuva EHDOTvoid TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; rasti_lippu = 1; //aseta vain lippu }}// pääsilmukassa:if (tick_flag) { tick_flag = 0; read_sensor(); }
Varoitus: Kaikkien keskeytyksen ja pääsilmukan välillä jaettujen muuttujien on oltava haihtuvia. Muussa tapauksessa kääntäjä saattaa tallentaa muuttujan rekisteriin välimuistiin ja jättää päivityksen huomaamatta. AI usein unohtaa tämän avainsanan; Etsi se erityisesti koodia lukiessasi.
Puskurin ylivuoto ja tyyppivirheet
AI voi kopioida tietoja sarjaportista kiinteän kokoiseen taulukkoon ilman rajojen tarkistamista. Sulautetussa järjestelmässä tämä tarkoittaa jatkuvan muistin murskaamista ja selittämättömiä kaatumisia. Varmista, että raja on tarkistettu jokaisessa strcpyssä, array-indeksissä ja DMA-puskurissa. Vastaavasti 8-bittinen laskuri nollautuu 255:n jälkeen; Tekoäly voi jättää tämän huomiotta ja luottaa ylitulkoon tiliin.
Varmistus laitteistossa: "Toimii" on mitattu, ei oletettu
Sulautetussa järjestelmässä luotettavin todiste on mittari, ei kääntäjä. Tarkista luotu koodi näillä kolmella tavalla:
- Oskilloskooppi/loginen analysaattori: Mittaa PWM-taajuutta, signaalin ajoitusta ja tiedonsiirtoaaltomuotoa. Jos halusit 20 kHz, katso näytöltä 20 kHz.
- Sarjaportin (UART) loki: Tulosta muuttujien arvot, tilasiirtymät ja virhelaskurit ja vertaa odotettua toimintaa.
- Sido- ja stressitestaus: Testaa, kestääkö järjestelmä suurimman kuormituksen, nopeimman tiedon ja huonoimman ajoituksen.
Jos mitattu arvo ei vastaa laskelmaa, kello-oletus, esiskaalaimen arvo tai rekisteriasetus on virheellinen; jahdata.
Mini Kotelo
Opiskelijaryhmällä on tekoäly tulostaa etäisyysmittauskoodi HC-SR04-ultraäänianturilla. Koodi kääntää, mutta etäisyys antaa aina naurettavia arvoja. Kun he yhdistävät sen oskilloskooppiin, he näkevät, että kaikujalka laskee ajoituksensa millisekunteina mikrosekuntien sijaan; AI käytti millis():tä micros():n sijaan. Tämä yhden sanan virhe sekoitti koko mittauksen kertoimella 1000. Kun he tulostavat raakakaikuajan sarjalokiin ja vertaavat sitä todelliseen viivaimeen, he löytävät virheen ja korjaavat sen. Oppitunti: käännetty koodi ei ole oikea koodi; Laitteiston mittaus paljastaa virheen välittömästi.
Yleisiä virheitä
- Rekisterinimien ja bitimaskien hyväksyminen vertaamatta niitä tietolomakkeeseen.
- Estoviiveen tai pitkän käsittelyn salliminen ISR:ssä.
- Unohdetaan epävakaat jaetut muuttujat.
- Ohita puskurin ja ryhmän rajojen tarkistus; ylivuotoa näkemättä.
- Luotetaan kellotaajuuteen ja ajoitusoletuksiin tarkistamatta niitä.
- Koodi "toimii" ilman mittausta oskilloskoopilla/sarjalogilla.
Yhteenvetona
- Määritä sulautettu tehtävä selkeästi laitteiston, toiminnan, rajoitusten ja käyttöliittymän suhteen.
- Pyydä tekoälyä laskemaan ajoitusarvot, kuten esiskaalaaja/ARR, ja tarkistamaan ne itsenäisesti.
- Pidä ISR:t lyhyinä, käytä volatiileja jaetuissa muuttujissa.
- Etsi erityisesti rekisteri-, puskurinrajoitus- ja tyypin leveysvirheitä.
- "Se toimii" todistetaan oskilloskoopilla, logiikka-analysaattorilla ja sarjalokin avulla, ei kääntäjällä.
- Jos mitattu arvo ei vastaa laskelmaa, tee olettamuksia.
Sovellustehtävä
Jos sinulla on mikro-ohjain (Arduino, STM32, ESP32), pyydä tekoälyltä PWM tai jaksollinen tehtävä tietyllä taajuudella. Ennen koodin lataamista: (1) tarkista taajuus/ajoitusarvot tilistä riippumatta kommenttirivillä, (2) tarkista ISR:n ja jaettujen muuttujien haihtuvuus ja esto. Latauksen jälkeen mittaa todellinen taajuus oskilloskoopilla tai logiikka-analysaattorilla ja vertaa sitä kohteeseen. Jos poikkeama on, etsi lähde ja korjaa se ja merkitse muistiin, mikä oli oletettu väärin.