0% au considerat acest document util (0 voturi)
6 vizualizări7 pagini

Free RTOS

FreeRTOS este un sistem de operare în timp real liber și open source popular pentru dispozitivele încorporate. Acesta permite crearea și gestionarea sarcinilor concurente cu programare bazată pe priorități. Exemplul de cod ilustrează utilizarea FreeRTOS pentru gestionarea a două sarcini de monitorizare a senzorilor pe Arduino.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări7 pagini

Free RTOS

FreeRTOS este un sistem de operare în timp real liber și open source popular pentru dispozitivele încorporate. Acesta permite crearea și gestionarea sarcinilor concurente cu programare bazată pe priorități. Exemplul de cod ilustrează utilizarea FreeRTOS pentru gestionarea a două sarcini de monitorizare a senzorilor pe Arduino.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

freeRTOS

ELAMARI MOUNA

Anul 2 master de
cercetare electronică
îmbarcată
2
FreeRTOS
I. Sistem de operare în timp real

Sistemul de operare prezent în interiorul dispozitivelor încorporate se numeș te un


RTOS (Sistem de Operare în Timp Real). În dispozitivele încorporate, sarcinile în timp
real sunt esenț iale unde sincronizarea joacă un rol foarte important. Sarcinile în
timpul real este determinist în timp, ceea ce înseamnă că timpul de răspuns la
orice eveniment este întotdeauna constant pentru a putea fi garantat că un eveniment
particular se va produce la un moment dat. RTOS este conceput pentru a executa aplicaț ii
cu un timing foarte precis ș i un grad înalt de fiabilitate. RTOS ajută de asemenea la
multitasking cu un singur procesor.

Există un număr mare de RTOS, libere, open-source ș i proprietare (RTX, MicroC/OS)


III,FreeRTOS, VxWorks...) având seturi de avantaje ș i dezavantaje diferite pentru a
de a se adapta la numărul foarte mare de probleme ale pieț ei. Noi avem din partea noastră
la ș coală ne-am concentrat atenț ia pe FreeRTOS, un mic scheduler în timp real care oferă un
un anumit număr de avantaje. Documentaț ia FreeRTOS este accesibilă direct în
linie de pe site-ul internet

II. FreeRTOS

FreeRTOS este unul dintre RTOS-urile de frunte pe piaț a sistemelor încorporate. FreeRTOS este liber de
drept de utilizare ș i open source (sub licenț ă). Este susț inut oficial de 34
arhitecturi (TI, Microchip, Atmel, NXP, Intel ...) ș i 18 lanț uri de compilare.

FreeRTOS, ca orice alt nucleu, este un instrument pur software, nu este


un sistem de fiș iere. FreeRTOS ne oferă o API de programare pentru a gestiona un
mediu multitasking.
Tâche FreeRTOS
3
Bloc de control al sarcinii (TCB)

Blocul de Control al Sarcinii (TCB) TCB este o structură de date care conț ine informaț iile
necesare pentru gestionarea sarcinilor. Odată ce sarcina este creată, FreeRTOS îi alocă un
TCB.

Ordinea

Ordonare Planificatorul FreeRTOS se bazează pe prioritatea sarcinilor. În caz de


unde mai multe sarcini împărtăș esc acelaș i nivel de prioritate, este round-robin care este
utilizat

Prioritate

Prioritate Prioritatea este un număr acordat unei sarcini atunci când aceasta este creată sau modificată
manually using the primitive os ThreadSetPriority. The maximum number of priorities
este definit de CMSIS RTOS la osPriorityRealtime.

A. Round robin

Sarcinile de aceeaș i prioritate sunt tratate în mod egal de programator; acesta alege să
fiecare quantum de timp o sarcină conform algoritmului round robin.
4

2. Controlul sarcinilor
vTaskDelay

vTaskDelaySpecificează numărul de ticuri de ceas (Ticks) ale programatorului în care


sarcina rămâne blocată, acest număr a fost trecut ca parametru. Dacă dorim să contabilizăm
timp de blocare în ms, este suficient să împărț iț i numărul de Ticks la constanț ă
portTICK_RATE_MS. Sintaxă: void vTaskDelay(const TickType_t xTicksToDelay);

Cod
#include <Arduino_FreeRTOS.h>

#include<task.h>

Void Task1(void*pvparameters);

Funcț ia Task2(void*pvparameters);

Float VLDR ; //variabile de valoare a fotorezistenț ei

Float Vtemp ;//variabile de valoare a senzorului de temperatură

Int entrée foto-rezistenț ă=A1 ;//foto-rezistenț ă pe A1

Int entreecapTem=A2 ;//senzor de temperatură pe A2


Int led_nuit ;
5
Int led_temperature ;

Funcț ia setup()

Serial început(9600);//monitor serial

Led_nuit =4 :

Led_temperature=6 ;

pinMode(led_nuit, OUTPUT);

pinMode(led_temperature, OUTPUT);

digitalWrite(led_nuit,LOW);

digitalWrite(led_temperature,LOW);

xTaskcreat(Task1,Task1,128,NULL, 2 ,NULL) ;

xTaskcreat(Task2,Task2, 128 ,NULL, 1 ,NULL);

vTaskStartScheduler() :

Void Task1(void*pvparameters)

While(1) {

VLDR=analogRead(entreePhotoResistance)*5/1023 ;

Dacă((VLDR)<1.71)

digitalWrite(led_nuit,HIGH);

Else

digitalWrite(led_nuit, LOW);

}}
Func ț ia Vid Task2(void* pvParameters){
6
În timp ce(1){

Vtemp=(analogRead(entreecapTemp)*5.0)/(1023*100);

Dacă((Vtemp)==10)//dacă temperatura este egală cu 10 grade, LED-ul clipeș te pe pin


numeric cu frecven ț ă de 200ms

DigitalWrite(led_temp,HIGH);

vTaskDelay(200/portTICK_PERIOD_MS);

digitalWrite(led_temp,LOW);

vTaskDelay(200/portTICK_PERIOD_MS);

Altfel{

digitalWrite(led_temp,LOW);

Buclă vidă()

}
7

S-ar putea să vă placă și