Arduino

HeliOS Arduinolle

HeliOS Arduinolle
Arduinon mikrokontrollerit käyttävät yhtä ohjelmaa kaikkien kytkimien, LEDien ja muiden järjestelmän osien ohjaamiseen. Ensimmäinen ohjelma, jonka Arduino-käyttäjä on oppinut, on tyypillisesti 'Blink' -ohjelma, joka käyttää viivästystoimintoa kytkeäksesi LED-valon päälle ja pois päältä tasaisesti. Tätä yksinkertaista ohjelmaa voidaan laajentaa tekemään monia asioita, mutta se ei voi sisältää moniajoa.

Edistyneemmille projekteille on muutettava arvoja ja luettava tietoja reaaliajassa, mikä ei ole mahdollista Arduinon tavallisen viivetoiminnon kanssa. Siksi tarvitaan erilainen ratkaisu. Onneksi HeliOS voi auttaa.

Arduinon rajoitukset

Kuten johdannossa mainittiin, Arduinon tavallista kieltä voidaan käyttää monin tavoin. On kuitenkin olemassa ongelma: Arduino ei voi suorittaa useita tehtäviä. Et voi esimerkiksi asettaa kolmea erilaista LED-valoa vilkkumaan itsenäisin välein. Tätä tehtävää ei voida suorittaa, koska jos käytät viivettä, pisin viiveellä varustettu LED estää muiden LEDien vilkkumisen odottaessaan tilan vaihtamista.

Tavallinen kysely on myös hankalaa, koska painikkeen tilan tarkistaminen edellyttää toimenpiteitä. Tavallisessa Arduinossa joudut määrittämään toiminnon kyselemään kytkimen tai muun tilan tilaa.

Vaikka näiden ongelmien ratkaisemiseen on olemassa ratkaisuja (esim.g., laitteiston keskeytykset, millis-toiminto, FreeRTOS-toteutus), mutta näillä ratkaisuilla on myös rajoituksia. Näiden ratkaisujen ongelmien ratkaisemiseksi Mannie Peterson keksi HeliOS: n. HeliOS on pieni ja tehokas, ja se voi toimia jopa 8-bittisillä ohjaimilla.

Harkitse alla olevaa koodia, joka on parhaimmillaan epäluotettava, koska viiveilmoitus estää painikkeen tarkistamisen.

int-painikePin = 2; // painonastan numero
int ledPin = 4; // LED-nastan numero
// muuttujat muuttuvat:
int-painikeTila = 0; // muuttuja painikkeen tilan lukemiseen
void setup ()
// alustaa LED-tappi lähdöksi:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// alustaa painonastan tulo:
pinMode (buttonPin, INPUT);

void loop ()
// lue painikkeen arvon tila:
buttonState = digitalRead (buttonPin);
// tarkista onko painonappia painettu. Jos on, buttonState on HIGH:
jos (buttonState == KORKEA)
digitalWrite (ledPin, HIGH); // kytke LED päälle
muu
digitalWrite (ledPin, LOW); // sammuta LED

digitalWrite (LED_BUILTIN, HIGH); // kytke LED päälle (HIGH on jännitetaso)
viive (1000); // odota hetki
digitalWrite (LED_BUILTIN, LOW); // sammuta LED tekemällä jännite LOW
viive (1000); // odota hetki

Kun suoritat tämän koodin, huomaat, että ledPin vilkkuu normaalisti. Kuitenkin, kun painat painiketta, se ei syty, tai jos se syttyy, se viivästyttää vilkkumista. Jotta tämä ohjelma toimisi, voit siirtyä muihin viivemenetelmiin; HeliOS tarjoaa kuitenkin vaihtoehdon.

Arduinoon upotettu Linux (HeliOS)

Huolimatta nimensä ”käyttöjärjestelmästä”, HeliOS ei ole käyttöjärjestelmä: se on kirjasto monitoimitoiminnoista. Se kuitenkin toteuttaa 21 toimintokutsua, jotka voivat yksinkertaistaa monimutkaisia ​​ohjaustehtäviä. Reaaliaikaisia ​​tehtäviä varten järjestelmän on käsiteltävä ulkoista tietoa vastaanotettaessa. Tätä varten järjestelmän on kyettävä suorittamaan moniajo.

Reaaliaikaisia ​​tehtäviä voidaan käyttää useilla strategioilla: tapahtumavetoisilla strategioilla, tasapainotetuilla strategioilla ja tehtävien ilmoittamisstrategioilla. HeliOS: n avulla voit käyttää mitä tahansa näistä strategioista toimintokutsujen kanssa.

Kuten FreeRTOS, HeliOS parantaa ohjainten moniajo-ominaisuuksia. Kehittäjien, jotka suunnittelevat monimutkaista kriittisen tärkeätä projektia, on kuitenkin käytettävä FreeRTOS: ää tai jotain vastaavaa, koska HeliOS on tarkoitettu harrastajille ja harrastajille, jotka haluavat tutkia monitoimisen voimaa.

HeliOS: n asentaminen

Arduino-kirjastoja käytettäessä IDE: n avulla voidaan asentaa uusia kirjastoja. Versioille 1.3.5 tai uudempi, valitset Käytä Kirjastonhallintaa.


Vaihtoehtoisesti voit ladata zip-tiedoston verkkosivulta ja käyttää tätä tiedostoa HeliOS: n asentamiseen.


Huomaa, että sinun on sisällytettävä HeliOS koodiin ennen kuin voit aloittaa sen käytön.

Esimerkki

Alla olevaa koodia voidaan käyttää LEDin vilkkumiseen kerran sekunnissa. Vaikka olemme lisänneet HeliOS-koodin, lopullinen vaikutus on sama kuin johdanto-oppaassa.

Tärkein ero tässä on se, että sinun on luotava tehtävä. Tämä tehtävä asetetaan odotustilaan ja ajastin asetetaan kertomaan tehtävälle, milloin se suoritetaan. Lisäksi silmukka sisältää vain yhden lauseen: xHeliOSLoop (). Tämä silmukka suorittaa kaiken koodin määrityksessä () määritetyn koodin. Kun suunnittelet koodia, sinun on määritettävä kaikki nastat, vakiot ja toiminnot ylimmässä asetuksessa.

#sisältää
// Käytetään LED-tilan tallentamiseen
haihtuva int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Määritä vilkkuva tehtävä
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
muu
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Määritä painikkeiden lukutehtävä
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// tarkista onko painonappia painettu. Jos on, buttonState on HIGH:
jos (buttonState == KORKEA)
// kytke LED päälle:
digitalWrite (ledPin, HIGH);
muu
// sammuta LED:
digitalWrite (ledPin, LOW);


void setup ()
// id seuraa tehtäviä
xTaskId id = 0;
// Tämä alustaa Helios-tietorakenteet
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// alustaa painonastan tulo:
pinMode (buttonPin, INPUT);
// Lisää ja tee taskBlink odota
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Id: n ajastusväli
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("PAINIKE", & buttonRead);
xTaskStart (id);

void loop ()
// Tämä, ja vain tämä, on aina silmukassa käytettäessä Heliosia
xHeliosLoop ();

Tällä koodilla voit ohjelmoida LED-valon vilkkumaan milloin tahansa ilman, että sinun tarvitsee huolehtia Arduinon viivästymisestä.

Johtopäätös

Tämä projekti on hieno ihmisille, jotka ovat uusia Arduinossa, koska sen avulla voit käyttää tavallista Arduino-koodia reaaliaikaisten tehtävien hoitamiseen. Tässä artikkelissa kuvattu menetelmä on kuitenkin tarkoitettu vain harrastajille ja tutkijoille. Vakavammissa projekteissa tarvitaan muita menetelmiä.

Viisi parasta pelin kaappauskorttia
Olemme kaikki nähneet ja rakastaneet suoratoistopelejä YouTubessa. PewDiePie, Jakesepticye ja Markiplier ovat vain joitain huippupelaajista, jotka ova...
How to Develop a Game on Linux
A decade ago, not many Linux users would predict that their favorite operating system would one day be a popular gaming platform for commercial video ...
Open Source Ports of Commercial Game Engines
Free, open source and cross-platform game engine recreations can be used to play old as well as some of the fairly recent game titles. This article wi...