2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Puhuimme aiemmin perustiedoista, kuten osoittimista ja rakenteista. Tämän artikkelin alussa teemme joitain monimutkaisia sovelluksia näistä perustiedoista, kuten jonoja.
Itse asiassa vuonna 2018 nauhoitin joukon videoita ohjelmaarkkitehtuurista, joka sisälsi vaiheittaiset opetusohjelmat jonojen muodostamisesta ja joukon käytännöllistä korkean tason ohjelmointiajattelua ja tekniikoita. Se sai hyvän vastaanoton ja tunnustuksen monien fanien ja ystävät. .
Koska opetusohjelma nauhoitettiin kuitenkin suhteellisen aikaisin, äänenlaatu on suhteellisen huono, ja jotkut yksityiskohdat eivät ole täydellisiä. Siksi tämä piikki on aina juuttunut sydämeeni. Jotta Wuji Microcontroller Special Training Camp -harjoitteluleirin tiukat voisivat oppia projektejamme tehokkaammin ja paremmin, aion äskettäin järjestää nämä perussisällöt uudelleen ja tehdä niistä sarjan. ohjelmistoarkkitehtuurin 2.0 grafiikka/video-opetusohjelmat.
Kun työskentelin T&K-insinöörinä, kohtasin usein viestintätuotteita, kuten teollisuuden ohjauskortteja, PDU:ita ja esineiden Internetiä.
Yleensä tällaisia tuotteita tehtäessä on päänsärkyä kirjoitettaessa ja vastaanotettaessa tietovirtoja, olipa kyseessä sarjaliikenne tai langaton tietoliikenne.
Esimerkiksi STM32 vastaanottaa sarjaportin datavirran.
Alkuaikoina määritin taulukon ja taulukon alaindeksimuuttujan vastaanotetun tietovirran käsittelemiseksi.
Tällä menetelmällä on monia ongelmia ja se lisää koodin kirjoittamisen monimutkaisuutta.
Koodin ylläpito on vaivalloista
Koska taulukon puskurin rajat on tarkistettava manuaalisesti rajojen ylittävien virheiden välttämiseksi, taulukoita ei ole yhtä helppo laajentaa ja ylläpitää kuin jonoja, kun on tarpeen käsitellä monimutkaisempia tietovirtoja tai lisätä uusia tietolähteitä.
Data on altis sekaannukselle
Suoraan keskeytyspalvelussa (ISR) toimivat taulukot voivat aiheuttaa resurssien kilpailua pääohjelman kanssa. Jos useat tehtävät käyttävät samaa matriisia, tarvitaan lisäsynkronointimekanismeja (kuten mutex-lukot) datakilpailuolosuhteiden ja epäjohdonmukaisuuksien välttämiseksi.
Jos tiedon vastaanottoa ja käsittelyä ei synkronoida, taulukoiden käyttö voi aiheuttaa tietojärjestyksen sekaannusta, mikä johtaa ohjelmaongelmien aiheuttamaan datapakettien menetykseen. Olen pyörinyt tämän ongelman kanssa ennen kuin tarvitsen lisäkoodia tämän ongelman ratkaisemiseksi, mikä lisää ohjelman monimutkaisuutta. Lisäksi minulla ei ole kokemusta, eikä sen tekeminen ole vakaa.
Tällainen ongelma vaivasi minua pitkään Vasta myöhemmin, kun vaihdoin työpaikkaa ja luin muiden insinöörien kirjoittaman koodin, tajusin, että jonot voivat ratkaista nämä kipukohdat. Sen jälkeen tapa käsitellä datavirtaa on muuttunut seuraavaksi:
Tuntuuko se paljon yksinkertaisemmalta? Itse asiassa jonon tietojenkäsittelyalgoritmi ei ole yksinkertainen. Se käyttää vain yleistä mallia tietojen käsittelyyn seuraavan kerran, kun kohtaat samanlaisia tarpeita koodista enemmän uudelleenkäytettäväksi.
Tämä on vain yksi jonojen sovelluksista. Tietojen välimuistiin tallentaminen ja jonon purkaminen noudattavat ensin sisään, ensin ulos -sääntöä.
Eli tallennetaan ensin tiedot ja viedään sitten käsittelyyn, kun prosessorilla on vapaata aikaa tai kun tietyt ohjelman ehdot täyttyvät.
Tämän ominaisuuden perusteella voidaan johtaa monia käytännön sovelluksia. Varsinkin kun käsitellään sovelluksia, joiden on varmistettava tietojen järjestys.
Olen koonnut yhteenvedon muutamasta paikasta, joita käytän eniten.
Kun mikro-ohjain vastaanottaa dataa sarjaportin kautta, se käyttää yleensä jonoa vastaanotettujen tavujen puskurointiin, mikä varmistaa, että tiedot eivät katoa ennen kuin pääohjelma käsittelee ne.
Äänentoisto- tai tallennuslaitteissa jonoja käytetään ääninäytedatan puskuroimiseen vaiheittaisen toiston tai tallennuksen toteuttamiseksi. Esimerkiksi: Esimerkiksi Wuji Microcontroller Special Training Camp -projektissa 6 WiFi- ja 4G-hälytysisännässä on äänikehotetoiminto. Jos esimerkiksi painat virityspainiketta poissa kotoa, ääni "virittyy pois kotoa". toistetaan, ja jos viritys kotona -painiketta painetaan, kuuluu "viritä kotona" -ääni.
Jos painan näitä kahta painiketta nopeasti, jotta ääni voidaan toistaa kokonaan, voin heittää avaintapahtuman ensin jonon välimuistiin, jotta ääni voidaan toistaa kokonaan peräkkäin.
RTOS-järjestelmää käyttävissä järjestelmissä jonoja käytetään viestien toimittamiseen ja tehtävien väliseen synkronointiin, ja ne tukevat monimutkaista tehtävän ajoitusta.
Kun avaintapahtumat on havaittu, ne voidaan laittaa ensin jonoon ja pääohjelma voi käsitellä nämä tapahtumat estääkseen avaintapahtumien katoamisen liian nopeiden näppäinpainallusten takia. Tämä on tällä hetkellä käytössä projektissamme.
Keräämämme ADC-data voidaan myös heittää tietyn käsittelyn jälkeen jonoon, jotta se voidaan käsitellä tai analysoida oikeaan aikaan.
Laiteohjelmistopäivityksen tietovuorovaikutus on suhteellisen suuri, mikä sopii hyvin jonojen käyttöön tietojen eheyden varmistamiseksi. Sitä käytetään myös projektissamme 6. Laiteohjelmiston päivityksen aikana ladatut laiteohjelmiston tietolohkot voidaan laittaa jonoon ja sitten. kirjoitetaan flash-muistiin järjestyksessä. Vastaavia sovelluksia on monia, kaiken kaikkiaan jonot ovat ratkaisseet minulle monia vaikeita ongelmia.
Jono on lineaarinen tietorakenne, joka noudattaa FIFO-periaatetta eli ensimmäinen jonoon tuleva data poistetaan ensimmäisenä. Jonossa tiedot asetetaan yleensä jonon toiseen päähän, jota kutsutaan jonon pyrstöksi, ja tiedot poistetaan jonosta toisessa päässä, jota kutsutaan jonon pääksi. Tämä rakenne tekee jonoista erittäin sopivia tilanteisiin, joissa tietoja on käsiteltävä asianmukaisesti.
Voimme ajatella, että jono on pingispallojen täyttäminen kaksisuuntaiseen putkeen. Tätä toimintoa kutsutaan jonotukseksi. Otamme pingispallon ulos putken oikealta puolelta. Tätä toimintoa kutsutaan jonosta poistamiseksi.
Putken pingispallot asettuvat muodostelmaan. Pöytätennispallo, joka menee sisään ensimmäisenä, tulee ulos ensimmäisenä. Tämä on ensimmäinen sisään ensimmäinen ulos -sääntö.
Ping-pong-palloja verrataan dataan. Se on välimuisti, joka tallentaa tietoja. Yllä olevan kuvan jonoon mahtuu 4 dataa. Se vastaa Buff[4]:tä.
Jonon ohjelmatoteutus tapahtuu kiinteän kokoisen taulukon, pääosoittimen ja hännän osoittimen kautta. Taulukot ovat vastuussa tietojen tallentamisesta. Pääosoitin vastaa osoitteesta, josta tiedot tulee ottaa pois jonosta poistettaessa. Häntäosoitin vastaa siitä, mihin osoitteeseen tiedot tulee tallentaa, kun se on jonossa. Siksi jonon ja jonon purkamisen toiminnot ovat kaksi osoitinta, jotka toistavat datan ensimmäinen sisään ensimmäinen ulos -algoritmi taulukossa.
Eri suunnittelijat toteuttavat jonokoodeja eri tavalla. Jos sinulla ei ole runsasta projektikokemusta tai et ole aiemmin käyttänyt jonoja, älä häpeä sitä, että sinun on kyettävä kirjoittamaan jonoalgoritmi.
Aloittaessani siirsin suoraan muiden ihmisten jono-ohjelmia ja jatkoin niiden käyttöä omissa projekteissani. Käytyäni niitä taitavasti useissa projekteissa tutkin sitten jonoalgoritmien toteutuksen yksityiskohtaista koodia ja kirjoitin sen muutaman kerran itse.
Siksi, erikoisharjoitteluleirimme veteraanit, älkää kirjoitelko sitä itse alussa, opettele käyttämään sitä ensin, vedä johtopäätökset yhdestä esimerkistä, sovella sitä erilaisiin skenaarioihin ja projekteihin ja yritä sitten kirjoittaa se itse, kun olet tutustunut sen kanssa tämä on erittäin tärkeä oppimisjakso.
Otetaan esimerkkinä Infinite Microcontroller Project Special Training Camp -jonoohjelma. Toimintoja on yhteensä 4.
JonoTyhjä(x)
Tyhjennä jono Ennen jokaista jonon käyttöä Tyhjennä-toiminto asettaa pää- ja loppuosoittimen osoittamaan oletusarvoisesti taulukon ensimmäistä elementtiä osoitepoikkeus tapahtuu.
Muodollinen parametrin kuvaus: x - on jonorakenteen muuttuja
QueueDataIn(x,y,z)
Tietojonotoiminto on heittää yksi tai useampi tavu dataa määritettyyn jonoon.
Muodollinen parametrin kuvaus:
x - Jonorakenteen muuttuja
y - dataosoite
z - Jonoon lisättävän tiedon määrä tavuina.
Ilmoitus:
①.Syötetyt tiedot voivat olla vain etumerkittömiä merkkejä.
② Jos jono on täynnä ja tiedot jatkuvat jonossa, tiedot korvataan ensimmäisestä datapaikasta alkaen.
QueueDataOut(x,y)
Tietojen purkutoiminto on ottaa yksi tavu dataa määritetystä jonosta.
Muodollinen parametrikuvaus: x - Jonorakennemuuttuja y - Poistetut tiedot, tallennettava osoite
Huomautus: Jonotustoimintomme voi ottaa vain yhden tavun dataa kerrallaan.
QueueDataLen(x)
Tyhjennä kaikki tiedot määritetystä jonosta. Muodollinen parametrin kuvaus: x - jonorakenteen muuttuja
Seuraava sisältö sisältää joitain koodin ja videon selityksiä, joita on hankala muokata. Voit ottaa minuun yhteyttä sopiaksesi Feishusta paremman lukukokemuksen saamiseksi.
Viime aikoina monet fanit ovat kysyneet minulta, kuinka oppia mikrokontrollereita. Perustuen kymmenen vuoden kokemukseni alalla, vietin kuukauden ja kokosin huolellisesti "yksisiruisen mikrotietokoneen".
Paras oppimispolku mikro-ohjaimille + lähtötaso edistyneisiin mikro-ohjaimien opetusohjelmiin + työkalupakki", Kaikki jaettu kovien fanien kanssa ilmaiseksi! ! !
Sen lisäksi jaan kyyneleen, mitä minulla on laatikkoni alaosassa22 suosittua avoimen lähdekoodin projektia,SisältääLähdekoodi + kaavio + PCB + dokumentaatio, antaa sinunRyhdy mestariksi nopeasti!
Katso opetusohjelmapaketit ja yksityiskohtaiset oppimispolut minultaTämän artikkelin alku alla。
《Oppipolku lähtötasolta edistyneeseen mikro-ohjainten hakkerointiin (opetusohjelmilla + työkaluilla)》
《Oppipolku lähtötasolta edistyneeseen mikro-ohjainten hakkerointiin (opetusohjelmilla + työkaluilla)》
《Oppipolku lähtötasolta edistyneeseen mikro-ohjainten hakkerointiin (opetusohjelmilla + työkaluilla)》