Arduino

HeliOS för Arduino

HeliOS för Arduino
Mikrokontrollerna i en Arduino använder ett enda program för att styra alla omkopplare, lysdioder och andra delar av systemet. Det första programmet som lärts av en Arduino-användare är vanligtvis "Blink" -programmet, som använder fördröjningsfunktionen för att slå på och av en LED i ett jämnt mönster. Detta enkla program kan utökas till att göra många saker, men det kan inte inkludera multitasking.

För mer avancerade projekt måste du ändra värden och läsa data i realtid, vilket inte är möjligt med standardfördröjningsfunktionen i Arduino. Därför behövs en annan lösning. Lyckligtvis kan HeliOS hjälpa till.

Begränsningarna av Arduino

Som nämnts i inledningen kan standardspråket för en Arduino tillämpas på många sätt. Det finns dock ett problem: Arduino kan inte multitaska. Du kan till exempel inte ställa in tre olika lysdioder för att blinka med oberoende intervall. Denna uppgift kan inte utföras eftersom, om du använder fördröjning, kommer lysdioden med den längsta fördröjningen att blockera de andra lysdiodernas blinkning medan du väntar på att byta tillstånd.

Standardfrågning är också besvärligt, eftersom det krävs en åtgärd för att kontrollera tillståndet för en knapp. I en vanlig Arduino måste du ställa in en funktion för att undersöka tillståndet för en switch eller något annat tillstånd.

Även om det finns lösningar för att hantera dessa frågor (t.ex.g., maskinvarustörningar, millisfunktionen, FreeRTOS-implementeringen), men dessa lösningar har också begränsningar. För att lösa problemen med dessa lösningar uppfann Mannie Peterson HeliOS. HeliOS är liten och effektiv och kan till och med köras på 8-bitars styrenheter.

Tänk på koden nedan, som i bästa fall är opålitlig eftersom fördröjningsuttalandet förhindrar att knappen kontrolleras.

int buttonPin = 2; // numret på tryckknappsstiftet
int ledPin = 4; // LED-stiftets nummer
// variabler ändras:
int buttonState = 0; // variabel för läsning av tryckknappens status
ogiltig installation ()
// initialisera LED-stiftet som en utgång:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// initialisera tryckknappsstiftet som en ingång:
pinMode (buttonPin, INPUT);

ogiltig slinga ()
// läs tillståndet för tryckknappsvärdet:
buttonState = digitalRead (buttonPin);
// kontrollera om tryckknappen trycks in. Om det är så är buttonState HIGH:
om (buttonState == HÖG)
digitalWrite (ledPin, HIGH); // slå på lysdioden
annat
digitalWrite (ledPin, LOW); // stäng av lysdioden

digitalWrite (LED_BUILTIN, HIGH); // slå på lysdioden (HÖG är spänningsnivån)
fördröjning (1000); // vänta en sekund
digitalWrite (LED_BUILTIN, LOW); // stäng av lysdioden genom att göra spänningen LÅG
fördröjning (1000); // vänta en sekund

När du kör den här koden ser du att 'ledPin' blinkar normalt. Men när du trycker på knappen tänds den inte, eller om den gör det fördröjer den blinkningssekvensen. För att detta program ska fungera kan du växla till andra fördröjningsmetoder; HeliOS ger dock ett alternativ.

Linux inbäddat på Arduino (HeliOS)

Trots "OS" i dess namn är HeliOS inte ett operativsystem: det är ett bibliotek med multitasking-funktioner. Det implementerar dock 21 funktionssamtal som kan förenkla komplexa kontrolluppgifter. För realtidsuppgifter måste systemet hantera extern information när den tas emot. För att göra detta måste systemet kunna multitaska.

Flera strategier kan användas för att hantera realtidsuppgifter: händelsestyrda strategier, balanserade körtidsstrategier och uppgiftsmeddelandestrategier. Med HeliOS kan du använda någon av dessa strategier med funktionssamtal.

Precis som FreeRTOS förbättrar HeliOS styrenheternas multitasking-funktioner. Men utvecklare som planerar ett komplext projekt av kritisk betydelse måste använda FreeRTOS eller något liknande eftersom HeliOS är avsedd att användas av entusiaster och hobbyister som vill utforska kraften i multitasking.

Installerar HeliOS

När du använder Arduino-biblioteken kan nya bibliotek installeras med IDE. För version 1.3.5 och högre väljer du att använda Library Manager.


Alternativt kan du ladda ner en zip-fil från webbsidan och använda den filen för att installera HeliOS.


Observera att du måste inkludera HeliOS i din kod innan du kan börja använda den.

Exempel

Koden nedan kan användas för att få en LED att blinka en gång per sekund. Även om vi har lagt till HeliOS-kod är den slutliga effekten densamma som i introduktionshandledningen.

Huvudskillnaden här är att du måste skapa en uppgift. Denna uppgift sätts i vänteläge och en timer ställs in för att berätta för uppgiften när den ska köras. Dessutom innehåller slingan bara ett uttalande: xHeliOSLoop (). Den här slingan kör all kod som definierats i inställningen () av ​​koden. När du planerar din kod måste du ställa in alla stift, konstanter och funktioner i toppinställningen.

#omfatta
// Används för att lagra lysdioden
flyktig int ledState = 0;
flyktig int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definiera en blinkuppgift
ogiltig taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
annat
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definiera en knappläsningsuppgift
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// kontrollera om tryckknappen trycks in. Om det är så är buttonState HÖG:
om (buttonState == HÖG)
// tänd lysdioden:
digitalWrite (ledPin, HIGH);
annat
// stäng av lysdioden:
digitalWrite (ledPin, LOW);


ogiltig installation ()
// id håller reda på uppgifterna
xTaskId id = 0;
// Detta initialiserar Helios datastrukturer
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// initialisera tryckknappsstiftet som en ingång:
pinMode (buttonPin, INPUT);
// Lägg till och låt sedan taskBlink vänta
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Timerintervall för 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("KNAPP", & buttonRead);
xTaskStart (id);

ogiltig slinga ()
// Detta, och bara detta, är alltid i slingan när du använder Helios
xHeliosLoop ();

Med den här koden kan du programmera LED-lampan så att den blinkar när som helst utan att behöva oroa sig för att Arduino blir försenad.

Slutsats

Det här projektet är utmärkt för människor som är nya i Arduino, eftersom det låter dig använda den vanliga Arduino-koden för att hantera uppgifter i realtid. Metoden som beskrivs i den här artikeln är dock endast för hobbyister och forskare. För mer seriösa projekt är andra metoder nödvändiga.

Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...