Arduino

HeliOS für Arduino

HeliOS für Arduino
Die Mikrocontroller eines Arduino verwenden ein einziges Programm, um alle Schalter, LEDs und andere Teile des Systems zu steuern. Das erste Programm, das ein Arduino-Benutzer lernt, ist normalerweise das 'Blink'-Programm, das die Verzögerungsfunktion verwendet, um eine LED in einem gleichmäßigen Muster ein- und auszuschalten. Dieses einfache Programm kann auf viele Dinge erweitert werden, aber es kann kein Multitasking beinhalten.

Für fortgeschrittenere Projekte müssen Sie Werte ändern und Daten in Echtzeit lesen, was mit der Standardverzögerungsfunktion in Arduino nicht möglich ist. Daher ist eine andere Lösung erforderlich. Glücklicherweise kann HeliOS helfen.

Die Grenzen von Arduino

Wie in der Einleitung erwähnt, kann die Standardsprache eines Arduino auf viele Arten angewendet werden. Es gibt jedoch ein Problem: Der Arduino kann nicht multitasken. Sie können beispielsweise nicht drei verschiedene LEDs so einstellen, dass sie in unabhängigen Intervallen blinken. Diese Aufgabe kann nicht ausgeführt werden, da bei Verwendung der Verzögerung die LED mit der längsten Verzögerung das Blinken der anderen LEDs blockiert, während auf den Zustandswechsel gewartet wird.

Auch die Standardabfrage ist mühsam, da die Überprüfung des Status einer Schaltfläche eine Aktion erfordert. In einem Standard-Arduino müssen Sie eine Funktion einrichten, um den Zustand eines Schalters oder eines anderen Zustands abzufragen.

Es gibt zwar Lösungen für diese Probleme (z.G., Hardware-Interrupts, die Millis-Funktion, die FreeRTOS-Implementierung), aber auch diese Lösungen haben Einschränkungen. Um die Probleme dieser Lösungen zu überwinden, erfand Mannie Peterson HeliOS. HeliOS ist klein und effizient und kann sogar auf 8-Bit-Controllern laufen.

Betrachten Sie den folgenden Code, der bestenfalls unzuverlässig ist, da die Verzögerungsanweisung verhindert, dass die Schaltfläche überprüft wird.

int buttonPin = 2; // die Nummer des Druckknopfstiftes
int ledPin = 4; // die Nummer des LED-Pins
// Variablen ändern sich:
int buttonState = 0; // Variable zum Lesen des Tasterstatus
Leere Einrichtung ()
// den LED-Pin als Ausgang initialisieren:
pinMode (ledPin, AUSGANG);
pinMode (LED_BUILTIN, AUSGANG);
// Initialisieren Sie den Druckknopf-Pin als Eingang:
pinMode (buttonPin, INPUT);

Leere Schleife ()
// den Status des Drucktastenwerts lesen:
buttonState = digitalRead (buttonPin);
// prüfen, ob der Taster gedrückt ist. Wenn ja, ist der buttonState HIGH:
if (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // LED einschalten
sonst
digitalWrite (ledPin, LOW); // LED ausschalten

digitalWrite (LED_BUILTIN, HIGH); // schalte die LED ein (HIGH ist der Spannungspegel)
Verzögerung (1000); // warte mal eine Sekunde
digitalWrite (LED_BUILTIN, LOW); // schalten Sie die LED aus, indem Sie die Spannung LOW machen
Verzögerung (1000); // warte mal eine Sekunde

Wenn Sie diesen Code ausführen, sehen Sie, dass der 'ledPin' normal blinkt blink. Wenn Sie die Taste jedoch drücken, leuchtet sie nicht auf, oder wenn dies der Fall ist, wird die Blinksequenz verzögert. Damit dieses Programm funktioniert, können Sie zu anderen Verzögerungsmethoden wechseln; HeliOS bietet jedoch eine Alternative.

Linux Embedded auf Arduino (HeliOS)

Trotz des „OS“ im Namen ist HeliOS kein Betriebssystem: Es ist eine Bibliothek von Multitasking-Funktionen. Es implementiert jedoch 21 Funktionsaufrufe, die komplexe Steuerungsaufgaben vereinfachen können. Für Echtzeitaufgaben muss das System externe Informationen so verarbeiten, wie sie empfangen werden. Dazu muss das System Multitasking-fähig sein.

Zur Bewältigung von Echtzeitaufgaben können mehrere Strategien verwendet werden: ereignisgesteuerte Strategien, laufzeitausgleichende Strategien und Aufgabenbenachrichtigungsstrategien. Mit HeliOS können Sie jede dieser Strategien mit Funktionsaufrufen anwenden.

Wie FreeRTOS verbessert HeliOS die Multitasking-Fähigkeiten von Controllern. Entwickler, die ein komplexes Projekt von kritischer Bedeutung planen, müssen jedoch FreeRTOS oder ähnliches verwenden, da HeliOS für Enthusiasten und Bastler gedacht ist, die die Leistungsfähigkeit von Multitasking erkunden möchten.

Installation von HeliOS

Bei Verwendung der Arduino-Bibliotheken können mit der IDE neue Bibliotheken installiert werden. Für Versionen 1.3.5 und höher, verwenden Sie den Bibliotheksmanager.


Alternativ können Sie eine ZIP-Datei von der Webseite herunterladen und diese Datei verwenden, um HeliOS . zu installieren.


Bitte beachten Sie, dass Sie HeliOS in Ihren Code aufnehmen müssen, bevor Sie es verwenden können.

Beispiel

Der folgende Code kann verwendet werden, um eine LED einmal pro Sekunde blinken zu lassen. Obwohl wir HeliOS-Code hinzugefügt haben, ist der endgültige Effekt der gleiche wie der des Einführungs-Tutorials.

Der Hauptunterschied besteht darin, dass Sie eine Aufgabe erstellen müssen. Diese Aufgabe wird in einen Wartezustand versetzt und ein Timer wird eingestellt, um der Aufgabe mitzuteilen, wann sie ausgeführt werden soll. Außerdem enthält die Schleife nur eine Anweisung: xHeliOSLoop(). Diese Schleife führt den gesamten Code aus, der in setup() des Codes definiert ist. Wenn Sie Ihren Code planen, müssen Sie alle Pins, Konstanten und Funktionen in der obersten Einstellung einstellen.

#einschließen
// Wird verwendet, um den Zustand der LED zu speichern
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definiere eine Blinkaufgabe
void taskBlink(xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
sonst
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definiere eine Schaltflächenleseaufgabe
void buttonRead(xTaskId id_)
buttonState = digitalRead (buttonPin);
// prüfen, ob der Taster gedrückt ist. Wenn ja, ist der buttonState HIGH:
if (buttonState == HIGH)
// LED einschalten:
digitalWrite (ledPin, HIGH);
sonst
// LED ausschalten:
digitalWrite (ledPin, LOW);


Leere Einrichtung ()
// id verfolgt Aufgaben
xTaskId-ID = 0;
// Dies initialisiert die Helios-Datenstrukturen
xHeliOSSetup();
pinMode (LED_BUILTIN, AUSGANG);
pinMode (ledPin, AUSGANG);
// Initialisieren Sie den Druckknopf-Pin als Eingang:
pinMode (buttonPin, INPUT);
// Hinzufügen und dann TaskBlink warten lassen
id = xTaskAdd("TASKBLINK", &taskBlink);
xTaskWait(id);
// Timer-Intervall für 'id'
xTaskSetTimer(id, 1000000);
id = xTaskAdd("BUTTON", &buttonRead);
xTaskStart(id);

Leere Schleife ()
//Dies, und nur das, ist immer in der Schleife, wenn Helios verwendet wird
xHeliosLoop();

Mit diesem Code können Sie die LED so programmieren, dass sie jederzeit blinkt, ohne sich Sorgen machen zu müssen, dass das Arduino verzögert wird.

Fazit

Dieses Projekt ist großartig für Leute, die neu bei Arduino sind, da Sie den regulären Arduino-Code verwenden können, um Echtzeitaufgaben zu erledigen. Die in diesem Artikel beschriebene Methode ist jedoch nur für Bastler und Forscher geeignet. Für ernsthaftere Projekte sind andere Methoden notwendig.

Top 10 Spiele zum Spielen auf Ubuntu
Die Windows-Plattform war eine der dominierenden Plattformen für Spiele aufgrund des großen Prozentsatzes von Spielen, die heute entwickelt werden, um...
Die 5 besten Arcade-Spiele für Linux
Heutzutage sind Computer ernsthafte Maschinen, die zum Spielen verwendet werden. Wenn du den neuen Highscore nicht bekommst, weißt du was ich meine. I...
Schlacht um Wesnoth 1.13.6 Entwicklung veröffentlicht
Schlacht um Wesnoth 1.13.6, das letzten Monat veröffentlicht wurde, ist die sechste Entwicklungsversion im 1.13.x-Serie und bietet eine Reihe von Verb...