Mikrokontrollerissa (tarkemmin sanoen Arduino Uno -levyllä, joka käyttää ATmega 328P-mikrokontrolleria) käytän tavallisesti ääretöntä silmukkaa tulojen jne. tarkistamiseen (Arduino-maassa tämä on yleensä loop () -toiminto). Jos jätän tämän toiminnon tyhjäksi, se ei aiheuta ongelmia.
Klassinen ohjelmointimalli, jolla on pääpiiri ...
Pöytätietokoneessa / kannettavassa, jossa on Intel i7 -prosessori jne., jos suoritin samanlaisen äärettömän silmukan (ilman mitään tekemistä tai hyvin vähän tekemistä), se kiinnittäisi suorittimen ~ 100%: iin ja yleensä kiihdyttäisi faneja jne. ( viive voidaan lisätä esimerkiksi tämän estämiseksi).
… saatamme kirjoittaa erilaisia pääsilmukoita.
Tämä sama pääsilmukka olisi huono käytäntö myös mikro-ohjaimessa, koska se myös suorittaa CPU: n täydellä kuormalla - mikä polttaa virtaa. Älä tee sitä, varsinkin jos sinulla on akku.
Nykyaikaisissa suorittimen ytimissä on synkronointimekanismit. Tämän avulla ihmiset voivat toteuttaa jotain "anna tämän silmukan suorituksen nukkua, kunnes 1 ms on kulunut tai kunnes ehto on muuttunut".
Se on pohjimmiltaan minkä tahansa monitoimisen käyttöjärjestelmän ydin - ja periaatteessa kaikki tämän nimen ansaitsevat käyttöjärjestelmät ovat jo nyt. Mikrokontrollereista löydät usein ns. RTOS-tiedostoja (reaaliaikaiset käyttöjärjestelmät), jotka takaavat, kuinka varma voit olla, että jonkin suorittaminen on alkanut niin monen nanosekunnin jälkeen, koska se on tyypillistä käyttötapaukselle mikrokontrollereista, kun taas työasemissa ja palvelimen suorittimissa on yleensä täysimittaisia samanaikaisia moniprosessoivia käyttöjärjestelmiä, jotka antavat vähemmän takuita ajoitukselle, mutta tarjoavat paljon suuremman valikoiman toimintoja sekä laitteisto- ja ohjelmistoympäristön abstraktiota.
En tiedä Arduinon suoritusympäristöä tarpeeksi hyvin, jotta voisin todella tehdä siitä päteviä lausuntoja. Tutkin tätä kirjoittaessani: Arduino ei tunnu olevan suunniteltu tätä varten - se odottaa sinun vain pyörivän kiireisesti. Koska sillä ei ole "tuotto" -toimintoa, "taloudenhoitoa", jota se tekee -silmukkaan
soitettujen puheluiden välillä, ei voida kutsua, kun käytät sisäänrakennettua delay
-toimintoa. Uh! Huono muotoilu.
Mitä tekisit teho- ja / tai latenssitietoisessa suunnittelussa, käyttäisit RTOS: ää mikrokontrollerisi kanssa - FreeRTOS on melko suosittu, ARM Cortex-M -sarjassa mbedillä on paljon pitoa, minä henkilökohtaisesti kuten ChibiOS (mutta en usko, että se on hyvä valinta vaihdettaessa Arduino-luonnoksista), Linux-säätiö työntää Zephyriä (josta olen ristiriidassa); todellakin, on paljon valintoja, ja mikrokontrollerin valmistaja tukee yleensä yhtä tai useampaa IDE: nsä kautta.
Miksi tämä näyttää olevan kunnossa mikrokontrollerissa, mutta sitä ei yleensä haluta mikroprosessorille?
Se ei todellakaan ole kunnossa, se on epätavallinen muotoilu itse asiassa mikro-ohjaimille, jotka yleensä tekevät asioita säännöllisin väliajoin tai reagoivat ulkoisiin ärsykkeisiin. Ei ole tavallista, että haluat "käyttää niin paljon suoritinta kuin mahdollista" mikro-ohjaimessa jatkuvasti.
Tähän malliin on poikkeuksia, ja niitä on sekä MCU: ssa että palvelin- / työpöytäprosessorimaailmassa; kun tiedät, että sinulla on käytännössä aina esim. Verkkotiedot käsiteltäviksi kytkinlaitteessa tai kun tiedät, että pelisi voisi aina jo ennakoida jonkin verran maailmaa, jota saatat tarvita tai et välttämättä tarvita hetkessä, löydät nämä spinpiirit. Joissakin laitteistoajureissa on "pyörimislukot", mikä tarkoittaa, että keskusyksikkö kysyy arvoa jatkuvasti, kunnes se on muuttunut (esim. Laitteiston asennus on valmis ja sitä voidaan käyttää nyt), mutta se on yleensä vain hätäratkaisu, ja sinun on selitettävä, miksi teet niin, kun yrität saada tällaista koodia esimerkiksi Linuxiin.
Olenko oikeassa ajattellessani, että ATmega toimii tosiasiallisesti 100-prosenttisesti ja että koska se on niin vähän virtaa käyttävä, se ei aiheuta ilmeisiä lämpöongelmia?
Kyllä. ATMega ei nykyaikaisella tavalla ole vähän virtaa käyttävä, mutta se on riittävän pieni virralla, jotta lämmöstä ei tule ongelmaa.