Eining 3 / 9

Innbyggð kerfi og örstýringarkóði

Hagnaður:

  • Geta til að skilgreina skráningar-, truflana- og tímasetningarkröfur fyrir örstýringuna með skýrum leiðbeiningum
  • Geta til að athuga C / Arduino kóðann sem framleiddur er af AI með tilliti til skráarstillinga, biðminni og rauntímatakmarkanir
  • Geta til að beita þeirri vana að sannreyna myndaða kóða með því að mæla hann á vélbúnaði (sveiflusjá, raðtengi)

Innbyggð kerfisþróun er þar sem hugbúnaður og vélbúnaður skerast: að stilla skráarbita rangt, halda truflun of lengi eða flæða yfir biðminni mun valda undarlegum bilunum á sviði sem erfitt er að endurskapa, jafnvel þó að kóðinn "samtaki sig" og keyrir. AI er sannarlega hraðaupphlaup á þessu sviði; Það getur framleitt upphaflegar beinagrindur, vélbúnaðarútdráttaraðgerðir, ástandsvélar og samskiptavenjur. En gervigreind sér ekki gagnablað kortsins þíns, þekkir ekki klukkutíðni þína og skynjar ekki rauntímatakmarkanir þínar. Í þessari einingu munum við fara yfir hvernig á að skilgreina vinnu örstýringa skýrt fyrir gervigreind, hvernig á að athuga C/Arduino kóðann sem myndast og hvers vegna þú ættir að mæla allt í vélbúnaði.

Skilgreina kröfuna skýrt: Skráning, klippa, tímasetning

Að segja gervigreindinni að „lýsa upp LED“ mun ekki virka; Hvaða kort, hvaða pinna, hvaða klukkutíðni, hvaða tímasetningu? Þegar þú úthlutar innbyggðu verkefni til gervigreindar skaltu nota þennan ramma: vélbúnað (MCU fjölskylda, klukka, pinna), virkni (hvað mun gerast), þvingun (tímasetning, kraftur, minni) og viðmót (skrá, HAL, Arduino bókasafn).

Veik kvaðning / sterk kvaðning

WEAK: "Framleiða PWM með STM32." (Niðurstaða: hvaða tímamælir, hvaða tíðni, hvaða pinna er óljóst; almennt, sennilega rangt skrá sem heitir kóði.) STERK: "Framleiðir 20 kHz, 0-100% stillanlegan duty PWM á TIM3 CH1 (PA6) fyrir STM32F103 (72 MHz kerfisklukka). Skrifaðu á skráarstigi (ekki HAL HAL-gildi og CALC0RR-gildi sýna 2 ALC0RR-gildi og CAULZ-útreikning). í athugasemdarlínunni - Stilltu skylduna með færibreytu á bilinu 0-100 - Athugaðu að gildin breytast ef klukkuforsendan þín er röng.

Munurinn er sá að öflug hvetja lætur líkanið sýna útreikninginn og sýna klukkuforsendu. Þannig að þú getur athugað forskala/ARR gildin sjálfstætt:

Fyrir 20 kHz PWM (72 MHz klukka): Timer_clock = 72 MHzEf við viljum forskala = 72-1 → teljara klukka = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49Staðfesting: 1e6 / (49+1) = 20 000

Endurskoðun AI kóða: Hvað á að leita að?

Bara vegna þess að myndakóðinn safnar saman þýðir það ekki að hann virki rétt. Fylgdu þessum gátlista:

stjórnsvæði

Hvað á að leita að

Skrá/bitastillingar

Nákvæmlega samhæft við gagnablað, rétt bitmaska

Truflanir (ISR)

Er það stutt? Engin töf á blokkara? Er rokgjarnt notað?

biðminni/fylki

Er landamæraeftirlit? Hætta á yfirfalli?

tímasetningu

Með seinkun eða tímamæli? Er raunverulegt tímatakmörk uppfyllt?

Tegund og breidd

8/16/32-bita yfirfall, undirritað/óundirritað rugl

völd/varðhundur

Óendanlega lykkja fóðrun varðhundur?

Trufla þjónustu venjur (ISR) eru algengasta uppspretta villna. AI setur stundum delay() eða langa lykkju inni í ISR. Þetta leiðir til þess að öðrum truflunum er sleppt og varðhundurinn endurstillir sig. Regla: ISR ætti að vera eins stutt og mögulegt er; Aðalstarfið ætti að vera að setja upp fána og færa hann í aðallykkjuna.

// WEAK (AI framleiðir þetta stundum): Blocker function in ISR void TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; read_sensor(); // getur tekið langan tíma - BAD CASE_Delay(10); // seinkun á ISR - VERY BAD }}// STERK: ISR stutt; starf færist í aðallykkjan uint8_t tick_flag = 0; // óstöðugt CONDITIONvoid TIM3_IRQHandler(void) { if (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; tick_flag = 1; //settu bara fána }}// í aðallykkju:if (tick_flag) { tick_flag = 0; read_sensor(); }

Varúð: Sérhver breytu sem deilt er á milli truflunar og aðallykkjunnar verður að vera óstöðug. Annars gæti þýðandinn vistað breytuna í skyndiminni í skránni og misst af uppfærslunni. AI gleymir oft þessu lykilorði; Leitaðu að því sérstaklega þegar þú lest kóðann.

Buffer Overflow og tegundarvillur

AI getur afritað gögn frá raðtengi yfir í fylki í fastri stærð án þess að kanna mörk. Í innbyggðu kerfi þýðir þetta að mylja samfellt minni og óútskýrð hrun. Gakktu úr skugga um að mörkin séu merkt við hverja strcpy, fylkisvísitölu og DMA biðminni. Á sama hátt endurstillir 8-bita teljari eftir 255; AI getur hunsað þetta og reitt sig á yfirfullan reikning.

Staðfesting í vélbúnaði: „Vinnur“ er mældur, ekki gert ráð fyrir

Í innbyggðu kerfi eru áreiðanlegustu sönnunargögnin mælirinn, ekki þýðandinn. Staðfestu kóðann sem myndaður er á þessa þrjá vegu:

  1. Sveiflusjá/rökgreiningartæki: Mældu PWM tíðni, merkjatímasetningu og samskiptabylgjuform. Ef þú vildir 20 kHz, sjáðu 20 kHz á skjánum.
  2. Serial port (UART) log: Prentaðu út breytugildi, ástandsbreytingar og villuteljara og berðu saman við væntanlega hegðun.
  3. Bundið og álagspróf: Prófaðu hvort kerfið standist undir mestu álagi, hröðustu gögnum og verstu tímasetningu.

Ef mælda gildið er ekki í samræmi við útreikninginn er klukkuforsenda, forskalagildi eða skráarstilling röng; elta.

Mini Case

Hópur nemenda lætur AI prenta fjarlægðarmælingarkóða með HC-SR04 hljóðskynjara. Kóðinn safnar saman en fjarlægðin gefur alltaf fáránleg gildi. Þegar þeir tengja það við sveiflusjána sjá þeir að bergmálsfóturinn reiknar tímasetningu sína í millisekúndum í stað míkrósekúndna; AI notaði millis() í staðinn fyrir micros(). Þessi eins orðs villa ruglaði alla mælinguna með stuðlinum 1000. Þegar þeir prenta hráa bergmálstímann inn í raðskrána og bera hann saman við alvöru reglustiku, finna þeir villuna og laga hana. Lexía: samanlagður kóði er ekki réttur kóði; Mæling í vélbúnaði leiðir strax í ljós villuna.

Algeng mistök

  • Samþykkja skráarnöfn og bitagrímur án þess að bera þau saman við gagnablaðið.
  • Leyfir lokunartöf eða langa vinnslu innan ISR.
  • Að gleyma óstöðugum á sameiginlegum breytum.
  • Framhjá biðminni og fylkismörkum athugun; að sjá ekki yfirfallið.
  • Að treysta á klukkutíðni og tímasetningarforsendur án þess að sannreyna þær.
  • Íhuga að kóðinn "virki" án þess að mæla hann með sveiflusjá/raðskrá.

Í stuttu máli

  • Skilgreindu innbyggða verkefnið skýrt hvað varðar vélbúnað, virkni, takmarkanir og viðmót.
  • Láttu gervigreindina reikna út tímasetningargildi eins og forskala/ARR og sannreyna þau sjálfstætt.
  • Haltu ISR stuttum, notaðu óstöðugt á sameiginlegum breytum.
  • Leitaðu sérstaklega að villum í skrá, biðminni og tegundarbreidd.
  • „Það virkar“ er sannað með sveiflusjá, rökgreiningartæki og raðskrárskrá, ekki með þýðandanum.
  • Ef mælda gildið er ekki í samræmi við útreikninginn skaltu elta forsendurnar.

Umsóknarverkefni

Með örstýringu sem þú hefur (Arduino, STM32, ESP32), biddu gervigreindina um PWM eða reglubundið verkefni á ákveðinni tíðni. Áður en kóðann er hlaðinn: (1) staðfestu tíðni-/tímagildin óháð reikningnum í athugasemdarlínunni, (2) athugaðu hvort sveiflukenndar og blokkir séu í ISR og sameiginlegum breytum. Eftir upphleðslu skaltu mæla raunverulega tíðni með sveiflusjá eða rökgreiningartæki og bera það saman við markið. Ef það er frávik, finndu heimildina og leiðréttu hana og athugaðu hvað var talið rangt.