Arduino

HeliOS par Arduino

HeliOS par Arduino
Arduino mikrokontrolleri izmanto vienu programmu, lai kontrolētu visus slēdžus, gaismas diodes un citas sistēmas daļas. Pirmā programma, ko apguvis Arduino lietotājs, parasti ir programma “Blink”, kas izmanto aizkaves funkciju, lai ieslēgtu un izslēgtu gaismas diode vienmērīgā veidā. Šo vienkāršo programmu var paplašināt, lai veiktu daudzas lietas, taču tā nevar ietvert daudzuzdevumus.

Izvērstākiem projektiem ir jāmaina vērtības un jālasa dati reāllaikā, kas nav iespējams, izmantojot standarta aizkaves funkciju Arduino. Tāpēc ir nepieciešams cits risinājums. Par laimi, HeliOS var palīdzēt.

Arduino ierobežojumi

Kā minēts ievadā, Arduino standarta valodu var izmantot dažādos veidos. Tomēr pastāv problēma: Arduino nevar veikt daudzuzdevumus. Piemēram, jūs nevarat iestatīt trīs dažādus gaismas diodes, kas mirgo neatkarīgi. Šo uzdevumu nevar veikt, jo, ja izmantojat kavēšanos, gaismas diode ar visilgāko kavēšanos bloķēs citu LED mirgošanu, gaidot stāvokļa pārslēgšanu.

Arī standarta aptauja ir apgrūtinoša, jo, pārbaudot pogas stāvokli, ir jāveic darbība. Standarta Arduino jums ir jāiestata funkcija, lai aptaujātu slēdža stāvokli vai jebkuru citu stāvokli.

Lai gan šo problēmu risināšanai ir risinājumi (piemēram,.g., aparatūras darbība tiek pārtraukta, funkcija milis, FreeRTOS ieviešana), taču šiem risinājumiem ir arī ierobežojumi. Lai pārvarētu šo risinājumu problēmas, Menijs Pētersons izgudroja HeliOS. HeliOS ir mazs un efektīvs, un to var darbināt pat ar 8 bitu kontrolleriem.

Apsveriet zemāk redzamo kodu, kas labākajā gadījumā ir neuzticams, jo aizkaves paziņojums neļaus pārbaudīt pogu.

int pogaPin = 2; // spiedpogas tapas numurs
int ledPin = 4; // LED tapas numurs
// mainīgie mainīsies:
int buttonState = 0; // mainīgais spiedpogas statusa nolasīšanai
anulēt iestatīšanu ()
// inicializēt LED tapu kā izvadi:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// inicializēt spiedpogas tapu kā ievadi:
pinMode (buttonPin, INPUT);

void loop ()
// nolasiet spiedpogas vērtības stāvokli:
buttonState = digitalRead (buttonPin);
// pārbaudiet, vai spiedpoga ir nospiesta. Ja tā ir, buttonState ir HIGH:
ja (buttonState == AUGSTS)
digitalWrite (ledPin, HIGH); // ieslēdziet LED
cits
digitalWrite (ledPin, LOW); // izslēgt LED

digitalWrite (LED_BUILTIN, HIGH); // ieslēdziet LED (HIGH ir sprieguma līmenis)
kavēšanās (1000); // pagaidiet sekundi
digitalWrite (LED_BUILTIN, LOW); // izslēdziet LED, padarot spriegumu LOW
kavēšanās (1000); // pagaidiet sekundi

Palaidot šo kodu, redzēsiet, ka “ledPin” mirgos normāli. Tomēr, nospiežot pogu, tā neiedegas vai, ja iedegas, tas aizkavēs mirgošanas secību. Lai šī programma darbotos, varat pārslēgties uz citām kavēšanās metodēm; tomēr HeliOS nodrošina alternatīvu.

Linux iebūvēts Arduino (HeliOS)

Neskatoties uz tā nosaukuma “OS”, HeliOS nav operētājsistēma: tā ir daudzuzdevumu funkciju bibliotēka. Tomēr tas īsteno 21 funkciju izsaukumu, kas var vienkāršot sarežģītus vadības uzdevumus. Veicot reāllaika uzdevumus, sistēmai jārīkojas pēc ārējās informācijas saņemšanas brīdī. Lai to izdarītu, sistēmai jāspēj veikt daudzuzdevumus.

Reāllaika uzdevumu apstrādei var izmantot vairākas stratēģijas: uz notikumiem balstītas stratēģijas, izpildes laikā līdzsvarotas stratēģijas un uzdevumu paziņošanas stratēģijas. Izmantojot HeliOS, jūs varat izmantot jebkuru no šīm stratēģijām ar funkciju izsaukumiem.

Tāpat kā FreeRTOS, arī HeliOS uzlabo kontrolieru daudzuzdevumu iespējas. Tomēr izstrādātājiem, kuri plāno sarežģītu, ļoti svarīgu projektu, ir jāizmanto FreeRTOS vai kaut kas līdzīgs, jo HeliOS ir paredzēts entuziastiem un hobijiem, kuri vēlas izpētīt daudzuzdevumu iespējas.

HeliOS instalēšana

Izmantojot Arduino bibliotēkas, ar IDE var instalēt jaunas bibliotēkas. 1. versijai.3.5 un augstāk, jūs izvēlaties izmantot bibliotēkas pārvaldnieku.


Alternatīvi, jūs varat lejupielādēt zip failu no tīmekļa vietnes un izmantot šo failu, lai instalētu HeliOS.


Lūdzu, ņemiet vērā, ka HeliOS jāiekļauj kodā, pirms varat sākt to lietot.

Piemērs

Zemāk esošo kodu var izmantot, lai LED mirgotu vienu reizi sekundē. Lai gan mēs esam pievienojuši HeliOS kodu, galīgais efekts ir tāds pats kā ievadmācības.

Galvenā atšķirība šeit ir tā, ka jums ir jāizveido uzdevums. Šis uzdevums tiek ievietots gaidīšanas stāvoklī, un taimeris ir iestatīts, lai uzdevumam norādītu, kad tas ir jāizpilda. Turklāt cilpa satur tikai vienu paziņojumu: xHeliOSLoop (). Šī cilpa palaiž visu kodu, kas definēts koda iestatījumā (). Plānojot kodu, augšējā iestatījumā ir jāiestata visas tapas, konstantes un funkcijas.

# iekļaut
// Izmanto, lai saglabātu gaismas diodes stāvokli
gaistošā int ledState = 0;
volatile int buttonState = 0;
const int pogaPin = 2;
const int ledPin = 4;
// Definējiet mirgojošu uzdevumu
void taskBlink (xTaskId id_)
ja (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
cits
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definējiet pogas lasīšanas uzdevumu
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// pārbaudiet, vai spiedpoga ir nospiesta. Ja tā ir, buttonState ir HIGH:
ja (buttonState == AUGSTS)
// ieslēdziet LED:
digitalWrite (ledPin, HIGH);
cits
// izslēgt LED:
digitalWrite (ledPin, LOW);


anulēt iestatīšanu ()
// id seko uzdevumiem
xTaskId id = 0;
// Tas inicializē Helios datu struktūras
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// inicializēt spiedpogas tapu kā ievadi:
pinMode (buttonPin, INPUT);
// Pievienojiet un pēc tam palaidiet taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// taimera intervāls “id”
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("BUTTON", & buttonRead);
xTaskStart (id);

void loop ()
// Tas un tikai tas vienmēr ir ciklā, lietojot Helios
xHeliosLoop ();

Izmantojot šo kodu, jūs varat ieprogrammēt LED mirgot jebkurā laikā, neuztraucoties par Arduino aizkavēšanos.

Secinājums

Šis projekts ir lieliski piemērots cilvēkiem, kuri ir jauni Arduino, jo tas ļauj izmantot parasto Arduino kodu reāllaika uzdevumu apstrādei. Tomēr šajā rakstā aprakstītā metode ir paredzēta tikai hobijiem un pētniekiem. Nopietnākiem projektiem ir nepieciešamas citas metodes.

Kā tvert un straumēt spēļu sesiju operētājsistēmā Linux
Agrāk spēļu spēlēšana tika uzskatīta tikai par hobiju, taču laika gaitā spēļu industrija piedzīvoja milzīgu tehnoloģiju un spēlētāju skaita pieaugumu....
Labākās spēles, ko spēlēt ar rokas izsekošanu
Oculus Quest nesen iepazīstināja ar lielisku ideju par rokas izsekošanu bez kontrolieriem. Ar arvien lielāku spēļu un aktivitāšu skaitu, kas atbalsta ...
Kā parādīt OSD pārklājumu pilnekrāna Linux lietotnēs un spēlēs
Spēlējot pilnekrāna spēles vai lietojot lietotnes bez atrautības pilnekrāna režīmā, jūs varat izslēgt no attiecīgās sistēmas informācijas, kas redzama...