Arduino

HeliOS for Arduino

HeliOS for Arduino
Mikrokontrollerne til en Arduino bruker et enkelt program for å kontrollere alle brytere, lysdioder og andre deler av systemet. Det første programmet lært av en Arduino-bruker er vanligvis 'Blink' -programmet, som bruker forsinkelsesfunksjonen til å slå en LED på og av i et jevnt mønster. Dette enkle programmet kan utvides til å gjøre mange ting, men det kan ikke inkludere multitasking.

For mer avanserte prosjekter, må du endre verdier og lese data i sanntid, noe som ikke er mulig med standard forsinkelsesfunksjon i Arduino. Derfor er det behov for en annen løsning. Heldigvis kan HeliOS hjelpe.

Begrensningene til Arduino

Som nevnt i innledningen kan standardspråket til en Arduino brukes på mange måter. Imidlertid er det et problem: Arduino kan ikke multitaske. For eksempel kan du ikke stille tre forskjellige lysdioder til å blinke med uavhengige intervaller. Denne oppgaven kan ikke utføres fordi hvis du bruker forsinkelse, vil lysdioden med lengst forsinkelse blokkere blinkingen av de andre lysdiodene mens du venter på å bytte tilstand.

Standard avstemning er også plagsom, da det å sjekke tilstanden til en knapp krever at det blir gjort noe. I en standard Arduino, må du sette opp en funksjon for å avstemme tilstanden til en bryter eller en hvilken som helst annen tilstand.

Mens det er løsninger for å løse disse problemene (f.eks.g., maskinvareforstyrrelser, millis-funksjonen, FreeRTOS-implementeringen), men disse løsningene har også begrensninger. For å overvinne problemene med disse løsningene, oppfant Mannie Peterson HeliOS. HeliOS er liten og effektiv, og den kan til og med kjøre på 8-biters kontrollere.

Tenk på koden nedenfor, som i beste fall er upålitelig fordi forsinkelsen vil forhindre at knappen blir sjekket.

int buttonPin = 2; // nummeret på trykknappen
int ledPin = 4; // nummeret på LED-pinnen
// variabler endres:
int buttonState = 0; // variabel for å lese trykknappens status
ugyldig oppsett ()
// initialiser LED-pinnen som en utgang:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// initialiser trykknappstiften som en inngang:
pinMode (buttonPin, INPUT);

ugyldig sløyfe ()
// les tilstanden til trykknappverdien:
buttonState = digitalRead (buttonPin);
// sjekk om trykknappen er trykket. Hvis den er, er buttonState HIGH:
hvis (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // slå på LED
annet
digitalWrite (ledPin, LOW); // slå LED av

digitalWrite (LED_BUILTIN, HIGH); // slå lysdioden på (HØY er spenningsnivået)
forsinkelse (1000); // vent litt
digitalWrite (LED_BUILTIN, LOW); // slå av LED-lampen ved å gjøre spenningen LAV
forsinkelse (1000); // vent litt

Når du kjører denne koden, vil du se at 'ledPin' vil blinke normalt. Når du trykker på knappen, vil den imidlertid ikke lyse, eller hvis den gjør det, vil den forsinke blinksekvensen. For å få dette programmet til å fungere, kan du bytte til andre forsinkelsesmetoder; imidlertid gir HeliOS et alternativ.

Linux innebygd på Arduino (HeliOS)

Til tross for "OS" i navnet, er HeliOS ikke et operativsystem: det er et bibliotek med multitasking-funksjoner. Imidlertid implementerer den 21 funksjonsanrop som kan forenkle komplekse kontrolloppgaver. For sanntidsoppgaver må systemet håndtere ekstern informasjon etter hvert som den mottas. For å gjøre det må systemet kunne multitaske.

Flere strategier kan brukes til å håndtere sanntidsoppgaver: hendelsesdrevne strategier, balanserte strategier og oppgavevarslingsstrategier. Med HeliOS kan du bruke noen av disse strategiene med funksjonsanrop.

I likhet med FreeRTOS forbedrer HeliOS multitasking-mulighetene til kontrollere. Imidlertid må utviklere som planlegger et komplekst prosjekt av kritisk betydning, bruke FreeRTOS eller noe lignende fordi HeliOS er ment for bruk av entusiaster og hobbyister som vil utforske kraften til multitasking.

Installere HeliOS

Når du bruker Arduino-bibliotekene, kan nye biblioteker installeres med IDE. For versjoner 1.3.5 og over velger du å bruke Library Manager.


Alternativt kan du laste ned en zip-fil fra nettsiden, og bruke den filen til å installere HeliOS.


Vær oppmerksom på at du må inkludere HeliOS i koden din før du kan begynne å bruke den.

Eksempel

Koden nedenfor kan brukes til å få en LED til å blinke en gang per sekund. Selv om vi har lagt til HeliOS-kode, er den endelige effekten den samme som den introduksjonsveiledningen.

Hovedforskjellen her er at du må opprette en oppgave. Denne oppgaven settes i ventetilstand, og en tidtaker er satt til å fortelle oppgaven når den skal kjøres. I tillegg inneholder sløyfen bare ett utsagn: xHeliOSLoop (). Denne sløyfen kjører all koden som er definert i oppsettet () av ​​koden. Når du planlegger koden din, må du sette alle pinner, konstanter og funksjoner i toppinnstillingen.

#inkludere
// Brukes til å lagre tilstanden til lysdioden
flyktig int ledet stat = 0;
flyktig int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definer en blinkoppgave
ugyldig taskBlink (xTaskId id_)
hvis (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
annet
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definer en knappeleseoppgave
ugyldig buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// sjekk om trykknappen er trykket. Hvis den er, er buttonState HIGH:
hvis (buttonState == HIGH)
// slå på LED:
digitalWrite (ledPin, HIGH);
annet
// slå av LED:
digitalWrite (ledPin, LOW);


ugyldig oppsett ()
// id holder rede på oppgaver
xTaskId id = 0;
// Dette initialiserer Helios datastrukturer
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// initialiser trykknappstiften som en inngang:
pinMode (buttonPin, INPUT);
// Legg til og la deretter taskBlink vente
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Tidsintervall for 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("KNAPP", & buttonRead);
xTaskStart (id);

ugyldig sløyfe ()
// Dette, og bare dette, er alltid i løkken når du bruker Helios
xHeliosLoop ();

Med denne koden kan du programmere LED-en til å blinke når som helst uten å måtte bekymre deg for at Arduino blir forsinket.

Konklusjon

Dette prosjektet er flott for folk som er nye i Arduino, da det lar deg bruke den vanlige Arduino-koden til å håndtere sanntidsoppgaver. Metoden beskrevet i denne artikkelen er imidlertid kun for hobbyister og forskere. For mer seriøse prosjekter er andre metoder nødvendige.

HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...
Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...