Aonad 3 / 9

Córais Leabaithe agus Giniúint Cód Microcontroller

Gnóthachain:

  • Cumas cód leabaithe a ghiniúint i gcomhthéacs cláir agus crua-earraí do Arduino/STM32/ESP32 le AI
  • Cumas patrúin leabaithe a aithint agus a cheartú amhail idirbhriseadh, amadóirí agus lúba neamhbhloic in aschur AI
  • Cumas an cód ginte a athbhreithniú i dtéarmaí cuimhne, fíor-ama agus slándála sula n-uaslódálann tú é chuig na crua-earraí

I meicitreonaic, is é an micririaltóir an áit a dtagann smaointe le chéile leis an domhan fisiceach. Cártaí mar Arduino, STM32, ESP32; léann sé braiteoirí, tiomáineann sé actuators, cuireann sé cumarsáid, agus déanann sé seo go léir faoi chuimhne teoranta, cumhacht próiseála teoranta, agus ceanglais dhian-uainiúcháin. Tá faisnéis shaorga an-úsáideach sa réimse seo: is féidir léi socruithe cláir a bhaint amach bunaithe ar bhileog sonraí braiteora, prótacal cumarsáide a chódú, agus idirbhriseadh an lasc ama a shocrú. Ach tá córais leabaithe ar cheann de na réimsí ina dtáirgeann AI na “bréagacha diongbháilte” is mó; toisc go bhfuil seoltaí cláir, maisc ghiotán agus iompar uainiúcháin sainiúil don chlár agus cuireann earráid giotán amháin isteach ar an iompar iomlán. San aonad seo, clúdaímid conas cód leabaithe a bheith ginte le AI agus conas é a athbhreithniú sula ndéantar crua-earraí é.

Difríocht Chód Leabaithe ó Bogearraí Pure

Tá neart cuimhne, córas oibriúcháin, agus éascaíocht dífhabhtaithe ag clár deisce. Níl an chuid is mó díobh seo ag cód leabaithe:

Méid

deasc

córas leabaithe

cuimhne

Leibhéal GB

Leibhéal KB (m.sh. 2 KB RAM)

uainiú

Go ginearálta solúbtha

Daingean, fíor-ama

debugging

Éasca (dífhabhtóir, logáil)

Crua (JTAG, sraitheach, LED)

Toradh earráide

Tuairteanna an clár

D’fhéadfadh damáiste a bheith déanta d’actuator/crua-earraí

rochtain acmhainne

Achoimrí OS

Rochtain dhíreach ar an gClár

Cinneann na difríochtaí seo do chritéir chun aschur AI a mheas: tá úsáid chuimhne, fíor-ama (neamh-bhlocáil), agus cruinneas cláir crua-earraí ag barr do sheicliosta i gcónaí.

Blocker vs Neamh-Bloc Cód

Is é an botún is coitianta a dhéanann tosaitheoirí (agus a dhéanann AI go minic) ná moill a úsáid (). moille(1000) glas ar an próiseálaí ar feadh 1 soicind; Le linn na tréimhse seo, ní féidir aon braiteoirí eile a léamh, ní féidir aon cnaipí a rialú. Tá sé seo do-ghlactha i meicitreonaic. Ina áit sin, úsáidtear patrún neamh-bhloic bunaithe ar millis().

// BAD: seachfhreastalaí -- ní féidir leis an bpróiseálaí aon obair eile a dhéanamh ar feadh soicind 1 lúb ar neamhní() { digitalWrite(LED, HIGH); moill(1000); // stopann gach rud digitalWrite(LED, ÍSEAL); moill(1000); // Ní féidir cnaipe éigeandála a léamh faoi láthair!}// MAITH: neamh-bhlocáil -- níl bac ar an lúb, ritheann tascanna eile má (nowMs - previousMs >= eatraimh) { previousMs = nowMs; ledStatus = !ledStatus; digitalWrite(LED, ledStatus); } cnaipeSeiceáil(); Is féidir // rith i ngach braiteoir timthriall Léigh(); // is féidir rith in aon lúb}

Is é an patrún neamh-blocála bunús na meicitreonaic leabaithe: sreabhann an lúb rialaithe go leanúnach, ní ghlasann aon tasc ceann eile. Ag insint don AI "ná húsáid moill, scríobh neamh-bhlocáil millis-bhunaithe" nuair a fheabhsaíonn cód scríofa go díreach cáilíocht an aschuir.

Leid: Cuardaigh le haghaidh moille (sa chód leabaithe ón AI. Má fheiceann tú moill sa phríomhlúb rialaithe, is minic nach bhfuil an cód sin oiriúnach do chóras fíor-ama agus ba chóir é a athscríobh.

Cur isteach agus Timers

Gabhaimid imeachtaí atá ríthábhachtach ó thaobh ama de (pulse ionchódóra, cnaipe, sampláil thréimhsiúil) le cur isteach in ionad fanacht sa phríomhlúb. Ba chóir an gnáthamh idirbhriste (ISR) a scríobh go gairid agus go cúramach: gan aon mhoill, Serial.print nó ríomhaireachtaí fada ann; Tá athróga roinnte marcáilte luaineach.

ionchódóir fada so-ghalaithe = 0; // Roinntear ISR agus lúb -> riocht luaineach ar neamhní enkoderISR() {// ISR gairid: déan é a chomhaireamh, ná déan aon obair eile más rud é (digitalRead(ENC_B)) enkoderCounter++; eile encoderCounter--;}socrú folús() { pinMode(ENC_A, INPUT_PULLUP); pinMode(ENC_B, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(ENC_A), enkoderISR, RISING);}lúb neamhní() { cuntar fada; gan briseadh(); // idirbhriseadh gearr le haghaidh cuntar léitheoireachta adamhach = ionchódóraCounter; idirbhriseadh(); //déan go sábháilte leis an gcuntar...}

Trí phointe ríthábhachtacha sa sampla seo is ea nuair a chailleann an AI go minic: (1) caithfidh an t-ionchódóir comhroinnte a bheith `so-ghalaithe` nó caillfidh an leas iomlán a bhaint tiomsaitheoir nuashonruithe; (2) ba cheart go mbeadh an ISR gearr; (3) Nuair a bhíonn athróg ilbhearta á léamh sa phríomhlúb, ní mór cur isteach don léitheoireacht adamhach a dhúnadh ar feadh tamaill ghearr, nó féadfaidh ISR idirghabháil a dhéanamh le linn léitheoireachta agus féadfar leathluach/luach truaillithe a léamh (riocht cine). Bí cinnte a sheiceáil an bhfuil na trí cinn seo i láthair sa chód AI.

Cruinneas agus Bileog Sonraí a chlárú

Is féidir le AI seoladh cláir braiteora nó giotán cumraíochta MCU a mhíléiriú go hiontaofa. Mar shampla, is é 0x6B clár bainistíochta cumhachta IMU MPU6050; Má thugann an AI seo mar 0x6A, cuirtear an cód le chéile, is cosúil go n-oibríonn sé, ach ní dhúisíonn an braiteoir. Ní aimsítear earráidí den sórt sin ach amháin nuair a chuirtear iad i gcomparáid leis an mbileog sonraí.

// MPU6050 múscail: de réir na mbileog PWR_MGMT_1 = 0x6B, luach 0x00#define MPU_ADDR 0x68#define PWR_MGMT_1 0x6B // <-- VERIFY ó datasheetWire.beginTransmission(MPU_ADDR(1);WirexMT_0; // múscail as codlata modeWire.endTransmission(fíor);

Aird: Fíoraigh gach seoladh cláir, masc giotán agus seoladh I2C/SPI a thug AI ón mbileog sonraí. Tá na luachanna seo sainiúil le cárta agus le sliseanna; Féadfaidh an luach a "chuimhníonn" an AI a bheith ó athbhreithniú sliseanna eile. Is cúis le hiompar mícheart go ciúin as clár mícheart.

Lag Pras / Pras Láidir

WEAK:"Léigh braiteoir teochta ar ESP32."(Cén braiteoir? Cén prótacal? Cén bioráin? Cód cineálach, is dócha mícheart.) LÁIDIR:"Léigh braiteoir teochta DS18B20 ar ESP32 (creat Arduino) ó GPIO4 le OneWire. Scríobh neamh-bhlocáil, sampla gach 1 soicind (ag baint úsáide as moill, bunaithe ar millis). nasc a úsáideann tú sa chéad nóta tráchta Ar chúiseanna cuimhne, úsáid maolán char in ionad Teaghrán."

Pras cumhachtach; Tugann sé an sliseanna, creat, braiteoir, prótacal, bioráin, patrún samplála, stádas earráide agus srian cuimhne. Ar an mbealach seo tá an t-aschur infhíoraithe agus réalaíoch.

Seicliosta Athbhreithnithe le haghaidh Cód Leabaithe

Sula lódálann tú an t-aschur AI, cuir tríd an liosta seo é:

  1. Blocáil: An bhfuil moill nó blocáil fhada sa phríomhlúb?
  2. luaineach: An bhfuil athróga roinnte le ISR luaineach?
  3. Rochtain adamhach: An bhfuil athróg roinnte ilbheart sábháilte le léamh?
  4. Clár: An bhfuil na seoltaí agus na maisc ghiotán comhoiriúnach leis an mbileog sonraí?
  5. Cuimhne: Teaghrán, eagair mhóra, an gcruthaíonn atarlú leibhéal KB thar maoil?
  6. Láimhseáil earráide: An láimhseáiltear earráidí léitheoireachta braite, agus amanna cumarsáide?
  7. Tús sábháilte: An gcuirtear na haschuir actuator i staid shábháilte (éighníomhach) ag am tosaithe?

Cás Mion

Tá an t-innealtóir córais leabaithe Baran ag an AI an cód a scríobh a léann an IMU le haghaidh drone. Tiomsaíonn an cód agus is cosúil go n-oibríonn sé, ach tá na luachanna uillinn gan brí. Cuireann Baran an seicliosta i bhfeidhm: déanann sé comparáid idir seoltaí an chláir leis an mbileog sonraí agus faigheann sé amach go n-aschuireann AI an clár cumraíochta gyroscope (0x1A in ionad 0x1B) go mícheart, agus mar sin tá an scála íogaireachta mícheart. Nuair a bheidh siad ceartaithe, socraíonn na luachanna. Ansin moill(10) fógraí sa phríomhlúb; é seo a thiontú go struchtúr millis-bhunaithe, toisc go bhfuil bac ar an lúb rialaithe eitilte do-ghlactha. Mar fhocal scoir, feictear nach bhfuil athróg an chuntair roinnte luaineach agus cuireann sé leis. Thug AI an cnámharlach go tapa; Ach ghlac an liosta athbhreithnithe trí earráid ar leith: clár, blocáil agus luaineach, agus ní raibh na crua-earraí i mbaol ar chor ar bith.

Botúin Choitianta

  • An freagra fíor-ama a mharú trí úsáid a bhaint as moill() sa phríomhlúb rialaithe.
  • Seachain an athróg a roinntear leis an ISR a bheith luaineach agus éilliú sonraí ciúine a bheith agat.
  • Athróg roinnte ilbheart a léamh go neamh-adamhach agus riocht cine a ghiniúint.
  • Gan fíorú a dhéanamh ar an gclár/mascanna giotán a thug AI leis an mbileog sonraí.
  • Ag cruthú thar maoil cuimhne trí úsáid a bhaint as Teaghráin agus eagair mhóra i RAM teoranta.
  • Ag déanamh dearmad ar aschuir actuator a dhaingniú ar dtús.

Go hachomair

  • Cód leabaithe; Feidhmíonn sé le cuimhne teoranta, uainiú daingean, agus rochtain dhíreach ar an gclár.
  • Sa phríomh-lúb, úsáidtear patrún neamh-blocála millis-bhunaithe in ionad moille.
  • Coimeádtar ISR gearr; caithfidh athróga comhroinnte a bheith so-ghalaithe agus rochtain adamhach orthu.
  • Fíoraítear seoltaí cláir agus maisc ghiotán i gcónaí i gcoinne na mbileog sonraí; Is féidir le AI a bheith mícheart.
  • Seiceáiltear cuimhne, láimhseáil earráidí agus stádas tosaithe sábháilte i gcónaí.
  • Pras cumhachtach; Áiríonn sé an sliseanna, an creat, an braiteoir, an prótacal, an bioráin agus na srianta.

Tasc feidhmchláir

Roghnaigh braiteoir (m.sh. DS18B20, MPU6050 nó HC-SR04) agus micrea-rialtóir (Arduino/ESP32/STM32). Bíodh an AI cód léite neamh-blocála a ghiniúint leis an teimpléad cumhachtach pras san aonad seo. Ansin lean na seacht mír den seicliosta athbhreithnithe ceann ar cheann: cuir clár/luach bioráin amháin ar a laghad i gcomparáid leis an mbileog sonraí, seiceáil an bhfuil moill ar lúb, seiceáil stádas luaineach na n-athróg comhroinnte. Cé mhéad mír "a ritheadh" sa chéad iarracht agus cé mhéad ceartúchán a theastaíonn? Tabhair faoi deara gach fadhb a aimsíonn tú agus a réiteach.