Eining 3 / 9

Innbyggð kerfi og örstýringarkóðagerð

Hagnaður:

  • Geta til að búa til innbyggðan kóða gefið skrá og vélbúnaðarsamhengi fyrir Arduino/STM32/ESP32 með gervigreind
  • Geta til að þekkja og leiðrétta innbyggð mynstur eins og truflanir, tímamæla og óblokkandi lykkjur í gervigreindarúttakinu
  • Geta til að endurskoða myndaða kóða hvað varðar minni, rauntíma og öryggi áður en honum er hlaðið upp á vélbúnaðinn

Í vélfræði er örstýringin þar sem hugmyndir mæta efnisheiminum. Spil eins og Arduino, STM32, ESP32; það les skynjara, keyrir stýribúnað, hefur samskipti og gerir allt þetta undir takmörkuðu minni, takmörkuðu vinnsluorku og ströngum tímakröfum. Gervigreind er mjög gagnleg á þessu sviði: hún getur dregið út skráarstillingar byggðar á gagnablaði skynjara, kóðað samskiptareglur, stillt tímarof. En innbyggð kerfi eru eitt af þeim sviðum þar sem gervigreind framleiðir mest „sannfærandi lygar“; vegna þess að netföng, bitagrímur og tímasetningarhegðun eru sérstök fyrir borðið og ein bitavilla truflar alla hegðunina. Í þessari einingu förum við yfir hvernig á að láta búa til innbyggðan kóða með gervigreind og hvernig á að endurskoða hann áður en hann er hlaðinn í vélbúnað.

Munur á innbyggðum kóða frá Pure Software

Skrifborðsforrit hefur nóg af minni, stýrikerfi og auðveld kembiforrit. Innbyggðan kóða vantar flest af þessu:

Stærð

skrifborð

innbyggt kerfi

minni

GB stig

KB stig (t.d. 2 KB af vinnsluminni)

tímasetningu

Almennt sveigjanlegt

Þétt, rauntíma

villuleit

Auðvelt (kembiforrit, log)

Harður (JTAG, raðnúmer, LED)

Niðurstaða villu

Forritið hrynur

Stýribúnaður/vélbúnaður gæti verið skemmdur

aðgangur að auðlindum

OS ágrip

Beinn aðgangur að skránni

Þessi munur ákvarðar forsendur þínar til að meta AI framleiðsla: minnisnotkun, rauntíma (ekki læst) og nákvæmni vélbúnaðarskrár eru alltaf efst á gátlistanum þínum.

Blocker vs non-blokkandi kóða

Algengustu mistökin sem byrjendur gera (og oft gerð af gervigreind) er notkun delay(). delay(1000) læsir örgjörvanum í 1 sekúndu; Á þessu tímabili er ekki hægt að lesa aðra skynjara, engum hnöppum er hægt að stjórna. Þetta er óviðunandi í vélfræði. Í staðinn er notað millis() byggt mynstur sem ekki hindrar.

// BAD: blocker -- örgjörvi getur ekki gert neina aðra vinnu í 1 sekúndu ógilda lykkju() { digitalWrite(LED, HIGH); delay(1000); // allt stoppar digitalWrite(LED, LOW); delay(1000); // Ekki er hægt að lesa neyðarhnapp á þessari stundu!}// GOOD: non-blocking -- lykkjan er ekki læst, önnur verkefni keyrð ef (nowMs - previousMs >= interval) { previousMs = nowMs; ledStatus = !ledStatus; digitalWrite(LED, ledStatus); } hnappinnAthugaðu(); // getur keyrt í hverri lotu sensorRead(); //getur keyrt í hvaða lykkju sem er}

Mynstrið sem ekki hindrar er undirstaða innbyggðrar vélbúnaðar: stjórnlykjan flæðir stöðugt, ekkert verkefni læsir öðru. Að segja gervigreindinni að „nota ekki töf, skrifa millis-undirstaða óblokkandi“ þegar kóða er skrifað bætir það gæði úttaksins beint.

Ábending: Leitaðu að delay( í innbyggða kóðanum frá gervigreindinni. Ef þú sérð seinkun í aðalstýringarlykkjunni, þá hentar oftast sá kóði ekki fyrir rauntímakerfi og ætti að endurskrifa hann.

Truflanir og tímamælir

Við tökum tíma mikilvæga atburði (kóðunarpúls, hnapp, reglubundin sýnatöku) með truflunum í stað þess að bíða í aðallykkjunni. Truflarútínan (ISR) ætti að skrifa stutt og vandlega: engar tafir, Serial.print eða langir útreikningar í henni; Sameiginlegar breytur eru merktar óstöðugar.

rokgjarn langur encoderCounter = 0; // ISR og lykkja er deilt -> rokgjarnt ástand void enkoderISR() { // Stutt ISR: teldu bara, gerðu ekkert annað ef (digitalRead(ENC_B)) enkoderCounter++; else encoderCounter--;}void uppsetning() { pinMode(ENC_A, INPUT_PULLUP); pinMode(ENC_B, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(ENC_A), enkoderISR, RISING);}void lykkja() { long counter; engar truflanir(); //stuttar truflanir fyrir atómlestrateljara = encoderCounter; truflar(); //viðskipti á öruggan hátt við teljarann...}

Þrír mikilvægir punktar í þessu dæmi eru þar sem gervigreindin missir oft af: (1) sameiginlegi kóðarateljarinn verður að vera „óstöðug“ eða hagræðing þýðanda mun missa af uppfærslum; (2) ISR ætti að vera stutt; (3) Við lestur margra bæta breytu í aðallykkju verður að loka truflunum fyrir atómlestur í stuttan tíma, annars getur ISR gripið inn í álestur og hálf/spillt gildi lesið (race condition). Vertu viss um að athuga hvort þessir þrír séu til staðar í gervigreindarkóðanum.

Skrá nákvæmni og gagnablað

Gervigreind getur á trúverðugan hátt gefið ranga mynd af skrá heimilisfang skynjara eða stillingarbita MCU. Til dæmis er orkustjórnunarskrá MPU6050 IMU 0x6B; Ef gervigreind gefur þetta sem 0x6A er kóðinn settur saman, hann virðist virka en skynjarinn vaknar ekki. Slíkar villur finnast aðeins í samanburði við gagnablaðið.

// MPU6050 vakning: samkvæmt gagnablaði PWR_MGMT_1 = 0x6B, gildi 0x00#define MPU_ADDR 0x68#define PWR_MGMT_1 0x6B // <-- VERIFY from datasheetWire.beginTransmission(MPU_ADDR);Wire.write(PWR_MGMT_1);Wire.write(0x00); // vakna úr svefnstillinguWire.endTransmission(true);

Athugið: Staðfestu hvert skrá heimilisfang, bitagrímu og I2C/SPI vistfang sem gervigreind gefur frá gagnablaðinu. Þessi gildi eru sértæk fyrir kort og flís; Gildið sem gervigreindin „man“ gæti verið frá annarri endurskoðun flísar. Röng skráning leiðir hljóðlega til rangrar hegðunar.

Veik kvaðning / sterk kvaðning

WEAK:"Lestu hitaskynjara á ESP32."(Hvaða skynjari? Hvaða samskiptareglur? Hvaða pinna? Almennur, líklega rangur kóða.)STERK:"Lestu DS18B20 hitaskynjara á ESP32 (Arduino ramma) frá GPIO4 með OneWire. Skrifaðu ekki blokkandi, sýni sýnishorn á 1 sekúndu fresti (notar seinkun, milliflögu í tilfelli eða 527). tilgreindu hverja bókasafn og pinnatengingu sem þú notar í fyrstu athugasemdinni. Af minnisástæðum, notaðu char buffer í staðinn fyrir String.

Öflug hvetja; Það gefur flís, ramma, skynjara, siðareglur, pinna, sýnatökumynstur, villustöðu og minnisþvingun. Þannig er framleiðslan bæði sannanleg og raunhæf.

Skoðaðu gátlista fyrir innbyggðan kóða

Áður en AI úttakið er hlaðið skaltu fara í gegnum þennan lista:

  1. Lokun: Er seinkun eða löng lokun í aðallykkjunni?
  2. óstöðug: Er breytum deilt með ISR sveiflukenndar?
  3. Atómaðgangur: Er öruggt að lesa multi-bæta samnýtt breytu?
  4. Skráning: Eru heimilisföngin og bitagrímurnar samhæfðar gagnablaðinu?
  5. Minni: Strengur, stór fylki, skapar endurkoma KB stig yfirfall?
  6. Meðhöndlun villu: Er verið að meðhöndla skynjara lestrarvillur, samskiptatíma?
  7. Örugg ræsing: Eru stýrisúttakin sett í öruggt (óvirkt) ástand við ræsingu?

Mini Case

Innbyggt kerfisverkfræðingur Baran lætur gervigreindina skrifa kóðann sem les IMU fyrir dróna. Kóðinn safnar saman og virðist virka, en horngildin eru tilgangslaus. Baran notar gátlistann: ber saman netföng skrárinnar við gagnablaðið og kemst að því að gervigreind gefur rangt út gyroscope stillingarskrána (0x1A í stað 0x1B), þannig að næmnikvarðinn er rangur. Eftir leiðréttingu jafnast gildin. Síðan tefja(10) tilkynningar í aðallykkju; að breyta þessu í millis-undirstaða uppbyggingu, vegna þess að það er óviðunandi að loka á flugstjórnarlykkjuna. Að lokum sér það að sameiginlega teljarabreytan er ekki óstöðug og bætir henni við. AI gaf beinagrindinni hratt; En endurskoðunarlistinn náði þremur aðskildum villum: skráningu, lokun og rokgjarnan, og vélbúnaðurinn var alls ekki í hættu.

Algeng mistök

  • Drepa rauntíma svarið með því að nota delay() í aðalstýringarlykkjunni.
  • Forðastu að gera breytuna sem deilt er með ISR sveiflukennda og upplifa hljóðlausa gagnaspillingu.
  • Að lesa margra bæta samnýtta breytu án atóms og búa til keppnisástand.
  • Staðfestir ekki skrána/bitagrímurnar sem gervigreind gefa upp með gagnablaðinu.
  • Að búa til minnisflæði með því að nota strengi og stór fylki í takmörkuðu vinnsluminni.
  • Gleymdi að tryggja upphaflega úttak stýrisbúnaðar.

Í stuttu máli

  • Innbyggður kóði; Það starfar með takmörkuðu minni, þéttri tímasetningu og beinan aðgang að skrám.
  • Í aðallykkjunni er notað millis-undirstaða óblokkandi mynstur í stað seinkun.
  • ISR er stutt; sameiginlegar breytur verða að vera sveiflukenndar og aðgengilegar atómum.
  • Skráningarheimilisföng og bitagrímur eru alltaf staðfestar gegn gagnablaðinu; AI getur verið rangt.
  • Minni, villumeðhöndlun og örugg ræsingarstaða er alltaf athugað.
  • Öflug hvetja; Það inniheldur flís, ramma, skynjara, samskiptareglur, pinna og takmarkanir.

Umsóknarverkefni

Veldu skynjara (t.d. DS18B20, MPU6050 eða HC-SR04) og örstýringu (Arduino/ESP32/STM32). Láttu gervigreindina búa til leskóða sem ekki hindrar með öflugu hvetjasniðmátinu í þessari einingu. Fylgdu síðan sjö liðum yfirlitsgátlistans eitt í einu: berðu saman að minnsta kosti eitt skrá/pinnagildi við gagnablaðið, athugaðu hvort lykkjutafir séu, athugaðu sveiflukennda stöðu samnýttra breyta. Hversu mörg atriði „gengdu“ í fyrstu tilraun og hversu margir þurftu leiðréttingu? Taktu eftir öllum vandamálum sem þú finnur og lagfærðu þau.