Arduino

HeliOS az Arduino számára

HeliOS az Arduino számára
Az Arduino mikrovezérlői egyetlen programot használnak az összes kapcsoló, LED és a rendszer egyéb részeinek vezérlésére. Az első program, amelyet egy Arduino felhasználó megtanult, általában a „Blink” program, amely a késleltetési funkcióval egyenletesen kapcsol ki és be egy LED-et. Ez az egyszerű program sok mindenre kiterjeszthető, de nem tartalmazhat multitasking-ot.

Haladóbb projekteknél meg kell változtatnia az értékeket és valós időben kell adatokat olvasnia, ami nem lehetséges az Arduino standard késleltetési funkciójával. Ezért más megoldásra van szükség. Szerencsére a HeliOS segíthet.

Az Arduino korlátai

Amint a bevezetőben említettük, az Arduino szokásos nyelve sokféleképpen alkalmazható. Van azonban egy probléma: az Arduino nem tud multitaskolni. Például nem állíthat be három különböző LED-et független időközönként villogni. Ez a feladat nem hajtható végre, mert ha késleltetést használ, a leghosszabb késleltetésű LED blokkolja a többi LED villogását, miközben az állapotváltásra vár.

A szokásos közvélemény-kutatás is problémás, mivel egy gomb állapotának ellenőrzése műveletet igényel. Egy szokásos Arduino alkalmazásban be kell állítania egy funkciót egy kapcsoló vagy bármely más állapot lekérdezéséhez.

Bár vannak megoldások e kérdések kezelésére (pl.g., hardver megszakítja, a millis funkció, a FreeRTOS megvalósítás), de ezeknek a megoldásoknak is vannak korlátai. E megoldások problémáinak leküzdésére Mannie Peterson feltalálta a HeliOS-t. A HeliOS kicsi és hatékony, sőt 8 bites vezérlőkön is képes futtatni.

Vegye figyelembe az alábbi kódot, amely legjobb esetben sem megbízható, mert a késleltetési utasítás megakadályozza a gomb ellenőrzését.

int gombPin = 2; // a nyomógomb csapszáma
int ledPin = 4; // a LED-csap száma
// változók megváltoznak:
int buttonState = 0; // változó a nyomógomb állapotának leolvasásához
void setup ()
// inicializálja a LED csapot kimenetként:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// inicializálja a nyomógomb csapot bemenetként:
pinMode (buttonPin, INPUT);

void loop ()
// beolvassa a nyomógomb értékének állapotát:
buttonState = digitalRead (buttonPin);
// ellenőrizze, hogy megnyomta-e a nyomógombot. Ha igen, a buttonState HIGH:
if (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // kapcsolja be a LED-et
más
digitalWrite (ledPin, LOW); // kapcsolja ki a LED-et

digitalWrite (LED_BUILTIN, HIGH); // kapcsolja be a LED-et (HIGH a feszültségszint)
késés (1000); // várj egy másodpercet
digitalWrite (LED_BUILTIN, LOW); // kapcsolja ki a LED-et úgy, hogy a feszültség LOW legyen
késés (1000); // várj egy másodpercet

Amikor futtatja ezt a kódot, látni fogja, hogy a 'ledPin' normálisan villog. Amikor azonban megnyomja a gombot, nem világít, vagy ha igen, akkor késlelteti a villogást. A program működése érdekében válthat más késleltetési módszerekre; a HeliOS azonban alternatívát nyújt.

Linux beágyazva az Arduino-ra (HeliOS)

A nevében szereplő „operációs rendszer” ellenére a HeliOS nem operációs rendszer: többfeladatos függvénykönyvtár. Ugyanakkor megvalósít 21 függvényhívást, amelyek egyszerűbbé tehetik az összetett vezérlési feladatokat. Valós idejű feladatok elvégzéséhez a rendszernek a beérkezéskor kezelnie kell a külső információkat. Ehhez a rendszernek képesnek kell lennie arra, hogy több feladatot végezzen.

A valós idejű feladatok kezelésére számos stratégia használható: eseményvezérelt stratégiák, futásidejű kiegyensúlyozott stratégiák és feladat-értesítési stratégiák. A HeliOS segítségével e stratégiák bármelyikét alkalmazhatja függvényhívásokkal.

A FreeRTOS-hoz hasonlóan a HeliOS is fokozza a vezérlők multitasking képességeit. Azonban azoknak a fejlesztőknek, akik kritikus fontosságú komplex projektet terveznek, a FreeRTOS-t vagy valami hasonlót kell használniuk, mivel a HeliOS-t olyan rajongók és hobbisták használják, akik szeretnék felfedezni a multitasking erejét.

A HeliOS telepítése

Az Arduino könyvtárak használatakor új könyvtárak telepíthetők az IDE segítségével. 1. verzió esetén.3.Az 5-ös vagy újabb verziónál válassza a Library Manager alkalmazást.


Alternatív megoldásként letölthet egy zip fájlt a weboldalról, és ezzel a fájllal telepítheti a HeliOS-t.


Felhívjuk figyelmét, hogy a HeliOS használatát a kódba be kell illesztenie, mielőtt elkezdené használni.

Példa

Az alábbi kód segítségével a LED másodpercenként egyszer villoghat. Bár hozzáadtuk a HeliOS kódot, a végső hatás megegyezik a bevezető bemutatóéval.

A fő különbség itt az, hogy létre kell hoznia egy feladatot. Ez a feladat várakozási állapotba kerül, és egy időzítő van beállítva, hogy megmondja a feladatnak, hogy mikor kell futtatni. Ezenkívül a ciklus csak egy utasítást tartalmaz: xHeliOSLoop (). Ez a hurok futtatja a kód beállításában () definiált összes kódot. Amikor megtervezi a kódot, meg kell adnia az összes csapot, állandót és funkciót a legfelső beállításban.

#include
// A LED állapotának tárolására szolgál
volatile int ledState = 0;
volatile int buttonState = 0;
const int gombPin = 2;
const int ledPin = 4;
// Definiál egy villogó feladatot
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
más
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definiáljon egy gombolvasási feladatot
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// ellenőrizze, hogy megnyomta-e a nyomógombot. Ha igen, a buttonState HIGH:
if (buttonState == HIGH)
// bekapcsolja a LED-et:
digitalWrite (ledPin, HIGH);
más
// a LED kikapcsolása:
digitalWrite (ledPin, LOW);


void setup ()
// id nyomon követi a feladatokat
xTaskId id = 0;
// Ez inicializálja a Helios adatstruktúrákat
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// inicializálja a nyomógomb csapot bemenetként:
pinMode (buttonPin, INPUT);
// Add hozzá, majd várj a taskBlink-re
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Időzítő intervalluma az „id” számára
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("GOMB", & buttonRead);
xTaskStart (id);

void loop ()
// Ez, és csak ez, mindig a hurokban van a Helios használatakor
xHeliosLoop ();

Ezzel a kóddal bármikor beprogramozhatja a LED villogását anélkül, hogy aggódnia kellene az Arduino késése miatt.

Következtetés

Ez a projekt nagyszerű azok számára, akik újak az Arduino számára, mivel lehetővé teszi a szokásos Arduino kód használatát valós idejű feladatok kezeléséhez. A cikkben leírt módszer azonban csak hobbistáknak és kutatóknak szól. Komolyabb projektek esetében más módszerekre van szükség.

Ingyenes és nyílt forráskódú játékmotorok a Linux játékok fejlesztéséhez
Ez a cikk felsorolja azokat az ingyenes és nyílt forráskódú játékmotorokat, amelyek felhasználhatók 2D és 3D játékok fejlesztésére Linuxon. Számos ily...
Shadow of the Tomb Raider for Linux Tutorial
A Shadow of the Tomb Raider a Tomb Raider sorozat tizenkettedik kiegészítője - az Eidos Montreal által létrehozott akció-kaland játék franchise. A ját...
Az FPS növelése Linux alatt?
Az FPS jelentése Képkocka másodpercenként. Az FPS feladata a videolejátszások vagy játékteljesítmények képkockasebességének mérése. Egyszerű szavakkal...