Arduino

HeliOS Arduinole

HeliOS Arduinole
Arduino mikrokontrollerid kasutavad kõigi lülitite, valgusdioodide ja muude süsteemi osade juhtimiseks ühte programmi. Esimene programm, mille Arduino kasutaja on õppinud, on tavaliselt programm "Blink", mis kasutab viivituse funktsiooni LED-i ühtlase mustri sisse- ja väljalülitamiseks. Seda lihtsat programmi saab laiendada paljude asjadega tegelemiseks, kuid see ei saa hõlmata multitegumtöötlust.

Täpsemate projektide jaoks peate muutma väärtusi ja lugema andmeid reaalajas, mis pole Arduino standardse viivituse funktsiooniga võimalik. Seetõttu on vaja teistsugust lahendust. Õnneks saab HeliOS aidata.

Arduino piirangud

Nagu sissejuhatuses mainitud, saab Arduino tavakeelt rakendada mitmel viisil. Siiski on probleem: Arduino ei saa mitut ülesannet täita. Näiteks ei saa te seada kolme erinevat LED-i iseseisva intervalliga vilkuma. Seda ülesannet ei saa täita, sest kui kasutate viivitust, blokeerib pikima viivitusega LED teiste olekute vilkumise, oodates oleku vahetamist.

Ka tavaline küsitlus on tülikas, kuna nupu oleku kontrollimiseks on vaja toimingut teha. Tavalises Arduinos peate seadistama funktsiooni, et küsida lüliti olekut või muud olekut.

Kuigi nende probleemide lahendamiseks on lahendusi (nt.g., riistvara katkestab, millisfunktsioon, FreeRTOS-i juurutamine), kuid nendel lahendustel on ka piirangud. Nende lahenduste probleemidest ülesaamiseks mõtles Mannie Peterson välja HeliOS-i. HeliOS on väike ja tõhus ning see võib töötada isegi 8-bitiste kontrolleritega.

Mõelge allolevale koodile, mis on parimal juhul ebausaldusväärne, kuna viivituse lause takistab nupu kontrollimist.

int nuppPin = 2; // nupu tihvti number
int ledPin = 4; // LED-tihvti number
// muutujad muutuvad:
int buttonState = 0; // muutuja nupu oleku lugemiseks
void setup ()
// lähtestage LED-tihvt väljundina:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// lähtestage sisestusklahvi tihvt:
pinMode (nuppPin, INPUT);

void loop ()
// loe nupu väärtuse olek:
buttonState = digitalRead (buttonPin);
// kontrollige, kas vajutatakse nuppu. Kui see on nii, on buttonState HIGH:
kui (buttonState == KÕRGE)
digitalWrite (ledPin, HIGH); // lülitage LED sisse
muu
digitalWrite (ledPin, LOW); // lülitage LED välja

digitalWrite (LED_BUILTIN, HIGH); // lülitage LED sisse (HIGH on pinge tase)
viivitus (1000); // oota sekund
digitalWrite (LED_BUILTIN, LOW); // lülitage LED välja, muutes pinge LOW
viivitus (1000); // oota sekund

Selle koodi käivitamisel näete, et 'ledPin' vilgub normaalselt. Kui aga nuppu vajutate, ei sütti see või kui see süttib, lükkab see vilkumise järjestuse edasi. Selle programmi toimimiseks võite lülituda teistele viivitusmeetoditele; HeliOS pakub siiski alternatiivi.

Arduinosse (HeliOS) manustatud Linux

Hoolimata oma nime OS-ist, pole HeliOS operatsioonisüsteem: see on mitme ülesande funktsioonide kogu. Kuid see rakendab 21 funktsioonikõnet, mis lihtsustavad keerukaid juhtimisülesandeid. Reaalajas ülesannete täitmiseks peab süsteem välist teavet käsitsema selle vastuvõtmisel. Selleks peab süsteem olema võimeline tegema mitut ülesannet.

Reaalajas toimuvate ülesannete käsitlemiseks saab kasutada mitut strateegiat: sündmustepõhised strateegiad, jooksuaegselt tasakaalustatud strateegiad ja ülesannete teatamise strateegiad. HeliOS-i abil saate funktsiooni väljakutsetega kasutada mõnda neist strateegiatest.

Nagu FreeRTOS, suurendab ka HeliOS kontrollerite multitegumtöötlusvõimalusi. Arendajad, kes kavandavad kriitilise tähtsusega keerukat projekti, peavad kasutama FreeRTOS-i või muud sarnast, sest HeliOS on mõeldud entusiastidele ja harrastajatele, kes soovivad uurida multitegumtöötluse jõudu.

HeliOS-i installimine

Arduino teekide kasutamisel saab IDE-ga installida uusi teeke. Versioonide 1 jaoks.3.5 ja uuemad valite kasutage teegi haldurit.


Teise võimalusena võite veebilehelt alla laadida ZIP-faili ja kasutada seda faili HeliOS-i installimiseks.


Pange tähele, et enne selle kasutamist saate oma koodi lisada HeliOS-i.

Näide

Allolevat koodi saab kasutada LED-i vilkumiseks üks kord sekundis. Kuigi oleme lisanud HeliOS-koodi, on lõpptulemus sama, mis sissejuhatava õpetuse omal.

Peamine erinevus on selles, et peate looma ülesande. See ülesanne viiakse ooteseisundisse ja taimer on määratud ülesandele ütlema, millal käivitada. Lisaks sisaldab tsükkel ainult ühte lauset: xHeliOSLoop (). See silmus käivitab kogu koodi, mis on määratud koodi seadistuses (). Koodi planeerimisel peate ülemisse seadistama kõik tihvtid, konstandid ja funktsioonid.

# kaasata
// Kasutatakse LED-i oleku salvestamiseks
lenduv int ledState = 0;
lenduv int nuppState = 0;
const int nuppPin = 2;
const int ledPin = 4;
// Määratlege vilkuv ülesanne
void taskBlink (xTaskId id_)
kui (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
muu
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Määrake nupu lugemise ülesanne
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// kontrollige, kas vajutatakse nuppu. Kui see on nii, on buttonState HIGH:
kui (buttonState == KÕRGE)
// lülitage LED sisse:
digitalWrite (ledPin, HIGH);
muu
// lülitage LED välja:
digitalWrite (ledPin, LOW);


void setup ()
// id jälgib ülesandeid
xTaskId id = 0;
// See lähtestab Heliose andmestruktuure
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// lähtestage sisestusklahvi tihvt:
pinMode (nuppPin, INPUT);
// Lisage ja seejärel oodake taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Taimeri intervall ID-le
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("BUTTON", & buttonRead);
xTaskStart (id);

void loop ()
// See ja ainult see on Heliose kasutamisel alati lingis
xHeliosLoop ();

Selle koodi abil saate programmeerida LED-i vilkuma igal ajal, ilma et peaksite muretsema Arduino viivitamise pärast.

Järeldus

See projekt on suurepärane inimestele, kes on Arduino jaoks uued, kuna see võimaldab teil reaalajas toimuvate ülesannete haldamiseks kasutada tavalist Arduino koodi. Kuid käesolevas artiklis kirjeldatud meetod on mõeldud ainult harrastajatele ja teadlastele. Tõsisemate projektide jaoks on vajalikud muud meetodid.

OpenTTD õpetus
OpenTTD on seal üks populaarsemaid ärisimulatsioonimänge. Selles mängus peate looma suurepärase transpordiettevõtte. Alustate siiski alguses umbes 190...
SuperTuxKart Linuxile
SuperTuxKart on suurepärane pealkiri, mis on loodud selleks, et tuua teie Linuxi süsteemis tasuta Mario Karti kogemus. See on päris keeruline ja lõbus...
Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...