Arduino

HeliOS pre Arduino

HeliOS pre Arduino
Mikrokontroléry Arduina používajú jediný program na ovládanie všetkých prepínačov, LED diód a ďalších častí systému. Prvý program, ktorý sa naučil užívateľ Arduina, je zvyčajne program „Blink“, ktorý využíva funkciu oneskorenia na rovnomerné zapínanie a vypínanie LED diód. Tento jednoduchý program je možné rozšíriť na množstvo vecí, ale nemôže obsahovať multitasking.

Pre pokročilejšie projekty je potrebné meniť hodnoty a načítať údaje v reálnom čase, čo pri štandardnej funkcii oneskorenia v Arduine nie je možné. Preto je potrebné iné riešenie. Našťastie môže HeliOS pomôcť.

Obmedzenia Arduina

Ako bolo spomenuté v úvode, štandardný jazyk Arduina sa dá použiť mnohými spôsobmi. Existuje však problém: Arduino nemôže vykonávať viac úloh naraz. Napríklad nemôžete nastaviť, aby tri rôzne LED diódy blikali v nezávislých intervaloch. Túto úlohu nie je možné vykonať, pretože ak použijete oneskorenie, LED s najdlhším oneskorením zablokuje blikanie ostatných LED počas čakania na prepnutie stavu.

Štandardné hlasovanie je tiež problematické, pretože kontrola stavu tlačidla vyžaduje vykonanie akcie. V štandardnom Arduine musíte nastaviť funkciu zisťovania stavu prepínača alebo iného stavu.

Aj keď existujú riešenia na riešenie týchto problémov (napr.g., hardvérové ​​prerušenia, funkcia millis, implementácia FreeRTOS), ale tieto riešenia majú tiež obmedzenia. Na prekonanie problémov týchto riešení vynašiel Mannie Peterson HeliOS. HeliOS je malý a efektívny a môže bežať dokonca aj na 8-bitových radičoch.

Zvážte nižšie uvedený kód, ktorý je v najlepšom prípade nespoľahlivý, pretože príkaz oneskorenia zabráni kontrole tlačidla.

int buttonPin = 2; // číslo pinu tlačidla
int ledPin = 4; // počet pinov LED
// premenné sa zmenia:
int buttonState = 0; // premenná na načítanie stavu tlačidla
void setup ()
// inicializuje pin LED ako výstup:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, VÝSTUP);
// inicializuje pin pinu ako vstup:
pinMode (buttonPin, INPUT);

void loop ()
// nacit stav hodnoty tlacidla:
buttonState = digitalRead (buttonPin);
// skontroluje, či je stlačené tlačidlo. Ak je, buttonState je VYSOKÝ:
if (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // rozsvieti sa LED
else
digitalWrite (ledPin, LOW); // zhasne LED

digitalWrite (LED_BUILTIN, HIGH); // rozsvieti LED (HIGH je úroveň napätia)
oneskorenie (1 000); // počkaj chvíľu
digitalWrite (LED_BUILTIN, LOW); // vypnite LED diódou nastavením NÍZKEHO napätia
oneskorenie (1 000); // počkaj chvíľu

Po spustení tohto kódu uvidíte, že „ledPin“ bude normálne blikať. Keď však stlačíte tlačidlo, nerozsvieti sa, alebo ak sa tak stane, oneskorí sa postupnosť blikania. Aby tento program fungoval, môžete prepnúť na iné spôsoby oneskorenia; HeliOS však poskytuje alternatívu.

Linux zabudovaný do systému Arduino (HeliOS)

Napriek názvu „OS“ nie je HeliOS operačným systémom: je to knižnica multitaskingových funkcií. Implementuje však 21 funkčných volaní, ktoré umožňujú zjednodušiť zložité úlohy riadenia. Pri úlohách v reálnom čase musí systém spracovávať externé informácie tak, ako sú prijímané. Aby to bolo možné, musí byť systém schopný vykonávať viac úloh naraz.

Na zvládnutie úloh v reálnom čase možno použiť niekoľko stratégií: stratégie riadené udalosťami, stratégie vyvážené za behu a stratégie notifikácie úloh. S HeliOS môžete využiť ktorúkoľvek z týchto stratégií na volanie funkcií.

Rovnako ako FreeRTOS, aj HeliOS vylepšuje možnosti multitaskingu radičov. Vývojári, ktorí plánujú komplexný projekt zásadného významu, však musia použiť FreeRTOS alebo niečo podobné, pretože HeliOS je určený pre nadšencov a fandov, ktorí chcú preskúmať silu multitaskingu.

Inštaluje sa HeliOS

Pri použití knižníc Arduino je možné nainštalovať nové knižnice pomocou IDE. Pre verzie 1.3.5 a vyššie zvolíte použitie správcu knižnice.


Prípadne si môžete stiahnuť súbor zip z webovej stránky a použiť ho na inštaláciu systému HeliOS.


Predtým, ako budete môcť začať používať HeliOS, musíte do svojho kódu zahrnúť.

Príklad

Pomocou nižšie uvedeného kódu je možné vykonať blikanie LED diódy raz za sekundu. Aj keď sme pridali kód HeliOS, výsledný efekt je rovnaký ako v úvodnom návode.

Hlavný rozdiel je v tom, že musíte vytvoriť úlohu. Táto úloha je uvedená do stavu čakania a je nastavený časovač, ktorý úlohu informuje, kedy sa má spustiť. Smyčka navyše obsahuje iba jeden príkaz: xHeliOSLoop (). Táto slučka spúšťa všetok kód definovaný v nastavení () kódu. Pri plánovaní kódu musíte nastaviť všetky piny, konštanty a funkcie v hornom nastavení.

#include
// Používa sa na uloženie stavu LED
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definujte úlohu blikania
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
else
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definujte úlohu čítania pomocou tlačidla
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// skontroluje, či je stlačené tlačidlo. Ak je, buttonState je VYSOKÝ:
if (buttonState == HIGH)
// zapnúť LED:
digitalWrite (ledPin, HIGH);
else
// vypnúť LED:
digitalWrite (ledPin, LOW);


void setup ()
// id sleduje úlohy
xTaskId id = 0;
// Týmto sa inicializujú dátové štruktúry Helios
xHeliOSSetup ();
pinMode (LED_BUILTIN, VÝSTUP);
pinMode (ledPin, OUTPUT);
// inicializuje pin pinu ako vstup:
pinMode (buttonPin, INPUT);
// Pridajte a potom počkajte taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Časový interval pre „id“
xTaskSetTimer (id, 10 000 000);
id = xTaskAdd ("TLAČIDLO", & buttonRead);
xTaskStart (id);

void loop ()
// Toto a iba toto je pri použití Helios vždy v slučke
xHeliosLoop ();

Pomocou tohto kódu môžete naprogramovať LED tak, aby kedykoľvek blikali, bez obáv z oneskorenia Arduina.

Záver

Tento projekt je vhodný pre ľudí, ktorí s Arduinom začínajú, pretože vám umožňuje používať bežný kód Arduino na vykonávanie úloh v reálnom čase. Metóda popísaná v tomto článku je však určená iba pre fanúšikov a výskumníkov. Pri závažnejších projektoch sú potrebné ďalšie metódy.

Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...
Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...
Hry Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Hranie hier na celú obrazovku alebo používanie aplikácií v režime rozptýlenia zadarmo na celú obrazovku vás môže odrezať od relevantných systémových i...