FreeRTOS Real Time Operating System implementat pentru plăcile AVR (Arduino Uno, Arduino Nano, Arduino Leonardo, ArduinoMega)

 FreeRTOS Real Time Operating System implementat pentru plăcile AVR (Arduino Uno, Arduino Nano, Arduino Leonardo, ArduinoMega)

 Un sistem de operare în timp real, cunoscut și sub denumirea de RTOS, este un sistem de operare destinat îndeplinirii cerințelor de aplicare în timp real. Este capabil să proceseze datele după cum intră, de obicei fără întârzieri, care de obicei sunt influențate și de viteza procesorului.

Într-un sistem multitasking, o aplicație poate consta din mai multe taskuri. Dacă folosim un procesor cu un singur nucleu, atunci un singur task poate rula pe procesor la un moment dat. Prin urmare, un task va fi în stare de rulare și toate celelalte taskuri vor fi în stare de nefuncționare. Asta înseamnă că, în aplicațiile bazate pe RTOS, sarcinile pot fi fie în stare de "Running", fie în stare de "Suspended". Starea de "Suspended" a unui task poate fi împărțită în continuare în trei sub-stări, cum ar fi starea blocată, starea pregătită și starea suspendată. Figura de mai jos prezintă durata de tranziție a unei sarcini într-un sistem multitasking.

 

FreeRTOS Real Time Operating System implementat pentru plăcile AVR (Arduino Uno, Arduino Nano, Arduino Leonardo, ArduinoMega)

Instalare

  In Arduino IDE click pe meniul Tools , apoi Manage Libraries , caută freertos, și click instalare. 

FreeRTOS Real Time Operating System implementat pentru plăcile AVR (Arduino Uno, Arduino Nano, Arduino Leonardo, ArduinoMega)

Documentatie :

Cod de test:

Codul este destul de simplu , practic se creează 3 funcții pentru cele trei taskuri dorite. Se apelează RTOS API xTaskCreate pentru creearea taskurilor.  Apoi se apeleaza vTaskStartScheduler pentru a porni sistemul. Funcția loop() nu se mai folosește, și o să rămână goală. În funția taskului se poate implementa un loop infinit în care se adaugă implementarea dorită, de exemplu citirea unui senzor de temperatură. În exemplul de mai jos doar se HIGH pe porturile 7 si 8 ale plăcii Arduino.


#include "Arduino_FreeRTOS.h"
void TaskBlink1( void *pvParameters );
void TaskBlink2( void *pvParameters );
void Taskprint( void *pvParameters );
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  xTaskCreate(TaskBlink1,  "task1",  128,  NULL,  1,  NULL );
  xTaskCreate(TaskBlink2,  "task2",  128,  NULL,  1,  NULL );
  xTaskCreate(Taskprint,  "task3",  128,  NULL,  1,  NULL );
  vTaskStartScheduler();
}
void loop()
{
  /*Nothing to do*/
}
void TaskBlink1(void *pvParameters)  {
  pinMode(8, OUTPUT);
  while(1)
  {
    Serial.println("Task1");
    digitalWrite(8, HIGH);   
    vTaskDelay( 200 / portTICK_PERIOD_MS ); 
    digitalWrite(8, LOW);    
    vTaskDelay( 200 / portTICK_PERIOD_MS ); 
  }
}
void TaskBlink2(void *pvParameters)  
{
  pinMode(7, OUTPUT);
  while(1)
  {
    Serial.println("Task2");
    digitalWrite(7, HIGH);   
    vTaskDelay( 300 / portTICK_PERIOD_MS ); 
    digitalWrite(7, LOW);   
    vTaskDelay( 300 / portTICK_PERIOD_MS ); 
  }
}
void Taskprint(void *pvParameters)  {
  int counter = 0;
  while(1)
  {
   counter++;
   Serial.println(counter); 
   vTaskDelay(500 / portTICK_PERIOD_MS);    
  }
}

Pentru întrebari și/sau consultanță tehnică vă stau la dispozitie pe blog sau pe email simedruflorin@automatic-house.ro. O seară/zi plăcută tuturor !

Etichete

Afișați mai multe

Arhiva

Afișați mai multe