Sunteți pe pagina 1din 10

MINISTERUL EDUCAŢIEI, CULTURII ȘI CERCETĂRII AL REPUBLICII

MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică

Sisteme de Operare
Lucrare de laborator nr.2

Student:
Coordonator: Dubac Serghei, asistent universitar

Chişinău, 2020
Sarcina

Realizarea unei aplicații pentru MCU care va rula minim 3 task-uri în două versiuni: Secvențial și cu
FreeRTOS.

Aplicația va rula minim 3 task-uri printre care:


1. Button Led – schimbare stare LED la detecția unei apăsări pe buton;
2. Button Led – intermitent, în faza în care LED-ul de la primul task e stins;
3. Incrementare/decrementare – valoare a unei variabile la apăsarea a două butoane care va reprezenta
numărul de recurențe/timp în care LED-ul de la al doilea task se va afla într-o stare;
4. Idle – afișarea stărilor din program, cum ar fi, afișare stare LED, și afișare mesaj la detecția apăsării
butoanelor, o implementare fiind ca la apăsarea butonului să se seteze o variabilă, iar la afișare mesaj
– resetare, implementând mecanismul provider/consumer.

Indicații

1. Să se implementeze comunicarea între task-uri ca provider/consumer, adică:


 task-ul care generează date, provider, stochează rezultatele într-o variabilă globală/semnal;
 task-ul care utilizează aceste date, consumer, citește aceasta variabilă/semnal.
Exemplu: task de UI (LCD sau Serial) preia informația din niște variabile-semnale globale și raportează.
2. A se urma principiile prezentate la curs Sisteme Secvențiale:
 stabilirea rezonabilă a recurenței pentru a diminua încărcarea procesorului;
 stabilirea offset-ului, întru a activa în ordinea cuvenită task-urilor.
3. Task-ul de raportare pentru Secvențial cu utilizare STDIO printf() către LCD va fi rulat în bucla
infinita/IDLE deoarece este bazat pe un spin lock și ar putea bloca întreruperile, deci secvențial clasic
– printf&delay în main loop, în FreeRtos – un task separat.
4. Versiune cu FreeRtos.

Etapele

Pentru aplicația (anume MCU) noastră vom utiliza un sistem compus din mai multe componente, care
le analizăm din schema 1. Treptat vom testa fiecare din acestea, dând la execuție la programul nostru.
Schema 1. Schema aplicației pentru MCU

După exacutarea în prima priză, LED-ul de culoare roșie este cu statut de stins, iar LED-ul verde este
intermitent timp de 1 secundă.

Schema 2. Executarea în primă repriză

Acțiunea următoare va fi, apăsarea butonului „BTM INCREMENT”. Acesta va mări timpul de ardere
intermitent (de exemplu, 2 secunde arde și 2 secunde în regim stins). În terminal (schema 3) analizăm
valoarea recurenței, LED-ul verde timp de 4 secunde se va afla în regim ON, iar apoi OFF.
Schema 3. Valoarea recurenței pentru Green LED

Testăm butonul „BTN RED LED”, vedem că automat LED-ul de culoare verde se stinge și se aprinde
cel de culoare roșie. De asemenea, acordăm atenție că atât timp cât roșu este activat, LED-ul verde va fi
inactiv (schema 4).

Schema 4. Testarea butonului „BTN RED LED”

Testăm butonul „BTN RESET” (schema 5) – toate valorile anterioare afișate după executări sunt
restate și întreg sistem revine la starea inițială. La final, avem afișat mesajul precum sistemul nostru a trecut
cu succes prin resetare.
Schema 5. Testarea butonului „BTN RESET”

Concluzie

În cadrul lucrării de laborator nr.2, am lucrat la realizarea unei aplicații pentru MCU. În baza unei
scheme, am programat și testat fiecare componentă. Am demontrat schimbarea de stări al unui buton la
detectarea unei acțiuni similare cu altă componentă. În proiect s-a pus accent pe numărul de recurențe per
timp. Fiecare buton are programul său, iar după resetare avem un mesaj afișat, datorită implimentării
mecanismul de provider per consumer.
ANEXA 1

Cod sursă. Sistem FreeRTOS

#include <Arduino_FreeRTOS.h>
#include <HardwareSerial.h>
#include <Arduino.h>

#define BUTTON_PIN 13
#define BUTTON_LED_INCR 10
#define BUTTON_LED_DECR 11

#define LED_PIN 4
#define LED_BLINK_PIN 5
#define LED_ON 1
#define LED_OFF 0
#define TASK_REC 2
#define TASK_OFFSET 5

int led2Rec;
int ledState;
int led2State;
int buttonState;
int led2ReadRec;
int btnResetState;

void GreenLEDblink( void *pvParameters );


void IncDecRecLED( void *pvParameters );
void PrintStates( void *pvParameters );
void RedLEDstatus( void *pvParameters);
void Reset( void *pvParameters);

void setup() {
led2Rec=0;

ledState=0;
led2State=0;
buttonState=0;
led2ReadRec = 1000;
pinMode(BUTTON_LED_DECR, INPUT);
pinMode(BUTTON_LED_INCR, INPUT);
pinMode(LED_BLINK_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(9, INPUT);
Serial.begin(9600);
xTaskCreate(GreenLEDblink, "GreenLedBlink", 128, NULL, 3, NULL);
xTaskCreate(IncDecRecLED, "RecForLed", 128, NULL, 2, NULL);
xTaskCreate(PrintStates, "Print", 128, NULL, 3, NULL);
xTaskCreate(RedLEDstatus, "RedLED", 128, NULL, 1, NULL);
xTaskCreate(Reset, "ResetEverything", 128, NULL, 3, NULL);
vTaskStartScheduler();
}

void loop()
{
}

/*--------------------------------------------------*/
/*---------------------- Tasks ---------------------*/
/*--------------------------------------------------*/

void GreenLEDblink(void *pvParameters){


(void) pvParameters;

for(;;){
if(ledState == 0)
{
if(led2State == 0)
{
led2State = 1;
digitalWrite(LED_BLINK_PIN, HIGH);
}
else
{
led2State = 0;
digitalWrite(LED_BLINK_PIN, LOW);

}
vTaskDelay(led2ReadRec / portTICK_PERIOD_MS);
}
}

void IncDecRecLED(void *pvParameters){


(void) pvParameters;

for(;;){

if(digitalRead(BUTTON_LED_INCR) == 0)
{
led2ReadRec=led2ReadRec+1000;
}
if(digitalRead(BUTTON_LED_DECR) == 0)
{
led2ReadRec=led2ReadRec-1000;
}
vTaskDelay(15);
}

void PrintStates(void *pvParameters){


(void) pvParameters;

for(;;){
Serial.println();
Serial.print("Red LED status:");
if(ledState==1){
Serial.println("ON");
} else Serial.println("OFF");
Serial.print("Green LED status:");
if(led2State==1){
Serial.println("ON");
} else Serial.println("OFF");
Serial.print("Green LED rec:");
Serial.print(led2ReadRec/1000);
Serial.println("s");

vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}

void RedLEDstatus( void *pvParameters){


(void) pvParameters;

for(;;){
buttonState = digitalRead(BUTTON_PIN);

if(buttonState == 0)
{
if(ledState == 1)
{
ledState = 0;
}
else
{
ledState = 1;
led2State=0;
digitalWrite(LED_BLINK_PIN, LOW);
}
digitalWrite(LED_PIN, ledState);
}

vTaskDelay(15);
}

void Reset(void *pvParameters){


(void) pvParameters;

for(;;){
btnResetState = digitalRead(9);

if(btnResetState == 0){
led2Rec=0;
ledState=0;
led2State=0;
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_BLINK_PIN, LOW);
led2ReadRec = 1000;
Serial.println("System Reseted!");
}
vTaskDelay(35);
}
}

ANEXA 2

Cod sursă. Sistem secvențial

#include <Arduino.h>
#include "timer-api.h"
#include <stdio.h>

#define BUTTON_PIN 13
#define BUTTON_LED_INCR 10
#define BUTTON_LED_DECR 11
#define BUTTON_PRESSED 0
#define BUTTON_NOT_PRESSED 1
#define LED_PIN 4
#define LED_BLINK_PIN 5
#define LED_ON 1
#define LED_OFF 0
#define TASK_REC 2
#define TASK_OFFSET 5

int led2Rec = 0;
int ledState = 0;
int led2State = 0;
int buttonState = 0;
int led2ReadRec = 0;

void setup() {
// put your setup code here, to run once:
pinMode(LED_PIN, OUTPUT);
pinMode(LED_BLINK_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(BUTTON_LED_DECR, INPUT);
pinMode(BUTTON_LED_INCR, INPUT);
//timer_init_ISR_1Hz(TIMER_DEFAULT);
timer_init_ISR_2Hz(TIMER_DEFAULT);
Serial.begin(9600);
led2Rec = TASK_OFFSET;
}

void taskLedWithButton() // change led1 state when press button


{
buttonState = digitalRead(BUTTON_PIN);
if(buttonState == BUTTON_PRESSED)
{
if(ledState == 1)
{
ledState = 0;
}
else
{
ledState = 1;
digitalWrite(LED_BLINK_PIN, LOW);
}
digitalWrite(LED_PIN, ledState);
}
}

void taskLedBlink() // blinking led


{
if(ledState == 0)
{
if(led2State == 0)
{
led2State = 1;
digitalWrite(LED_BLINK_PIN, HIGH);
}
else
{
led2State = 0;
digitalWrite(LED_BLINK_PIN, LOW);
}
}
}

void taskButton2LedReadRec() // read recurency for blink led


{
if(digitalRead(BUTTON_LED_INCR) == BUTTON_PRESSED)
{
led2ReadRec++;
}
if(digitalRead(BUTTON_LED_DECR) == BUTTON_PRESSED)
{
led2ReadRec--;
}
}

void timer_handle_interrupts(int timer)


{
taskLedWithButton();
taskButton2LedReadRec();
if(--led2Rec <= 0){
taskLedBlink();
led2Rec = led2ReadRec;
}
}

void loop()
{
Serial.println();
Serial.print("Led state: ");
Serial.println(ledState);
Serial.print("Led 2 state: ");
Serial.println(led2State);
Serial.print("Led2 offset: ");
Serial.println(led2Rec);
Serial.print("Read rec for led2: ");
Serial.println(led2ReadRec);
delay(1000);
// put your main code here, to run repeatedly:
}

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

  • Lab1 Arduino CavcacaliucNina
    Lab1 Arduino CavcacaliucNina
    Document10 pagini
    Lab1 Arduino CavcacaliucNina
    Nina Cavcaliuc
    50% (2)
  • IoT Exm
    IoT Exm
    Document73 pagini
    IoT Exm
    viorel amigo
    Încă nu există evaluări
  • Laborator 1
    Laborator 1
    Document7 pagini
    Laborator 1
    Eugen Savca
    Încă nu există evaluări
  • Examen Somipp
    Examen Somipp
    Document65 pagini
    Examen Somipp
    Ana Toma
    100% (1)
  • Laborator 1 Teoria Sistemelor
    Laborator 1 Teoria Sistemelor
    Document11 pagini
    Laborator 1 Teoria Sistemelor
    Sergiu Şveţ
    Încă nu există evaluări
  • Atestare
    Atestare
    Document3 pagini
    Atestare
    Cristian Conea
    Încă nu există evaluări
  • Atestare 2
    Atestare 2
    Document20 pagini
    Atestare 2
    Elena Chicu
    Încă nu există evaluări
  • SarcinaLaborator 2
    SarcinaLaborator 2
    Document2 pagini
    SarcinaLaborator 2
    Amarfii Sergiu
    Încă nu există evaluări
  • Lab 2 Pam
    Lab 2 Pam
    Document5 pagini
    Lab 2 Pam
    Augusta Bucataru
    Încă nu există evaluări
  • Laborator Nr. 1 - SAV
    Laborator Nr. 1 - SAV
    Document4 pagini
    Laborator Nr. 1 - SAV
    Katalina
    Încă nu există evaluări
  • PAM Lab 1
    PAM Lab 1
    Document6 pagini
    PAM Lab 1
    Vladislav Crivenco
    Încă nu există evaluări
  • Lab 7 Somipp
    Lab 7 Somipp
    Document5 pagini
    Lab 7 Somipp
    Augusta Bucataru
    Încă nu există evaluări
  • PAm Examen-1
    PAm Examen-1
    Document12 pagini
    PAm Examen-1
    Eric Semeniuc
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document7 pagini
    Lab 2
    Vika Belinschi
    Încă nu există evaluări
  • Raport CDE Lab.2
    Raport CDE Lab.2
    Document7 pagini
    Raport CDE Lab.2
    crismaruion
    100% (1)
  • Arhitectura Calculatoarelor Curs UTM
    Arhitectura Calculatoarelor Curs UTM
    Document47 pagini
    Arhitectura Calculatoarelor Curs UTM
    Mihai Croitoru
    Încă nu există evaluări
  • IoT LL2
    IoT LL2
    Document9 pagini
    IoT LL2
    Anya Mr
    Încă nu există evaluări
  • Damean Alexandra IOT4
    Damean Alexandra IOT4
    Document9 pagini
    Damean Alexandra IOT4
    Damean Alexandra
    Încă nu există evaluări
  • Damean Alexandra IOT5
    Damean Alexandra IOT5
    Document9 pagini
    Damean Alexandra IOT5
    Damean Alexandra
    Încă nu există evaluări
  • IoT LL4
    IoT LL4
    Document4 pagini
    IoT LL4
    Anya Mr
    Încă nu există evaluări
  • IoT LL1
    IoT LL1
    Document12 pagini
    IoT LL1
    Anya Mr
    100% (1)
  • Damean Alexandra IOT6
    Damean Alexandra IOT6
    Document11 pagini
    Damean Alexandra IOT6
    Damean Alexandra
    Încă nu există evaluări
  • LL3 IoT ECiobanu
    LL3 IoT ECiobanu
    Document6 pagini
    LL3 IoT ECiobanu
    Ecaterina Ciobanu
    Încă nu există evaluări
  • IoT LL6
    IoT LL6
    Document8 pagini
    IoT LL6
    Anya Mr
    Încă nu există evaluări
  • Damean Alexandra IOT3
    Damean Alexandra IOT3
    Document8 pagini
    Damean Alexandra IOT3
    Damean Alexandra
    Încă nu există evaluări
  • Lab7 IOT
    Lab7 IOT
    Document8 pagini
    Lab7 IOT
    DanuIepuras
    Încă nu există evaluări
  • SOMIPP Lab 5
    SOMIPP Lab 5
    Document5 pagini
    SOMIPP Lab 5
    Augusta Bucataru
    Încă nu există evaluări
  • PADExamMM (
    PADExamMM (
    Document34 pagini
    PADExamMM (
    viorel amigo
    Încă nu există evaluări
  • Pad LP 01
    Pad LP 01
    Document7 pagini
    Pad LP 01
    Andrei Guritanu
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document6 pagini
    Lab 2
    Maria Sevciuc
    Încă nu există evaluări
  • SEI Atest 1
    SEI Atest 1
    Document20 pagini
    SEI Atest 1
    Nicoleta Lesan
    100% (1)
  • Laborator Retele de Calculatoare nr.2
    Laborator Retele de Calculatoare nr.2
    Document3 pagini
    Laborator Retele de Calculatoare nr.2
    Alexandr Țurcan
    Încă nu există evaluări
  • IoT Lab1
     IoT Lab1
    Document2 pagini
    IoT Lab1
    Eugenia Batrînac
    Încă nu există evaluări
  • Iot 6
    Iot 6
    Document10 pagini
    Iot 6
    DanuIepuras
    Încă nu există evaluări
  • SOMIPPRaspunsuri
    SOMIPPRaspunsuri
    Document82 pagini
    SOMIPPRaspunsuri
    Urmanschi Mihail
    Încă nu există evaluări
  • Laborator 1 Prelucrarea Semnalelor
    Laborator 1 Prelucrarea Semnalelor
    Document19 pagini
    Laborator 1 Prelucrarea Semnalelor
    Ion Cornea
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document8 pagini
    Lab 1
    dtatn
    Încă nu există evaluări
  • Examen SAV
    Examen SAV
    Document24 pagini
    Examen SAV
    Vitalie Nastasiu
    Încă nu există evaluări
  • Atestarea 1 AC Rezolvat
    Atestarea 1 AC Rezolvat
    Document10 pagini
    Atestarea 1 AC Rezolvat
    Ion Damaschin
    Încă nu există evaluări
  • Somipp Linux 2 UTM
    Somipp Linux 2 UTM
    Document7 pagini
    Somipp Linux 2 UTM
    Cristi Poselețchi
    Încă nu există evaluări
  • SI Raspunsuri Examen
    SI Raspunsuri Examen
    Document9 pagini
    SI Raspunsuri Examen
    Vladislav Cigolea
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document12 pagini
    Lab 1
    Nicolae Arpentii
    Încă nu există evaluări
  • Suport-de-Curs PSI Partea2 V 28 11 2017
    Suport-de-Curs PSI Partea2 V 28 11 2017
    Document198 pagini
    Suport-de-Curs PSI Partea2 V 28 11 2017
    Gheorghe Rotari
    Încă nu există evaluări
  • Subiecte Examen ASDN
    Subiecte Examen ASDN
    Document3 pagini
    Subiecte Examen ASDN
    Camy Tripon
    Încă nu există evaluări
  • Laborator NR.2
    Laborator NR.2
    Document9 pagini
    Laborator NR.2
    Daniil
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document22 pagini
    Lab 1
    Nicoletta Ciudin
    Încă nu există evaluări
  • Lab 3 PS Nadia
    Lab 3 PS Nadia
    Document13 pagini
    Lab 3 PS Nadia
    Nadia
    Încă nu există evaluări
  • Algoritmul RSA
    Algoritmul RSA
    Document3 pagini
    Algoritmul RSA
    Ayrin Iris
    Încă nu există evaluări
  • Laborator-2 TS
    Laborator-2 TS
    Document13 pagini
    Laborator-2 TS
    Сергей Борта
    Încă nu există evaluări
  • Lab 1 Pam
    Lab 1 Pam
    Document6 pagini
    Lab 1 Pam
    Augusta Bucataru
    Încă nu există evaluări
  • Programarea in Retea Lab 4 Iepuras Daniel TI-171
    Programarea in Retea Lab 4 Iepuras Daniel TI-171
    Document8 pagini
    Programarea in Retea Lab 4 Iepuras Daniel TI-171
    DanuIepuras
    Încă nu există evaluări
  • PPE Lab7
    PPE Lab7
    Document14 pagini
    PPE Lab7
    danielploaia
    Încă nu există evaluări
  • SOMIPP Lab6
    SOMIPP Lab6
    Document4 pagini
    SOMIPP Lab6
    Dan
    Încă nu există evaluări
  • Chestionar Evaluarea II La SAV
    Chestionar Evaluarea II La SAV
    Document21 pagini
    Chestionar Evaluarea II La SAV
    Damean Alexandra
    Încă nu există evaluări
  • PS TS
    PS TS
    Document14 pagini
    PS TS
    Victor Turculet
    Încă nu există evaluări
  • MMC2 Modulul2
    MMC2 Modulul2
    Document16 pagini
    MMC2 Modulul2
    ViorelRotari
    Încă nu există evaluări
  • Lab3 SAV
    Lab3 SAV
    Document4 pagini
    Lab3 SAV
    Zeul Hriscei
    Încă nu există evaluări
  • PSI Lab 2
    PSI Lab 2
    Document13 pagini
    PSI Lab 2
    Nicolae
    Încă nu există evaluări
  • PAM Lab6
    PAM Lab6
    Document31 pagini
    PAM Lab6
    Ion Cornea
    Încă nu există evaluări
  • LAB 3 Apa
    LAB 3 Apa
    Document14 pagini
    LAB 3 Apa
    Cristi Poselețchi
    Încă nu există evaluări
  • IoT2 Raport
    IoT2 Raport
    Document10 pagini
    IoT2 Raport
    crismaruion
    Încă nu există evaluări
  • LL1 IoT ECiobanu
    LL1 IoT ECiobanu
    Document9 pagini
    LL1 IoT ECiobanu
    Ecaterina Ciobanu
    Încă nu există evaluări
  • Lab 4 Apa
    Lab 4 Apa
    Document21 pagini
    Lab 4 Apa
    crismaruion
    Încă nu există evaluări
  • IoT2 Raport
    IoT2 Raport
    Document10 pagini
    IoT2 Raport
    crismaruion
    Încă nu există evaluări
  • Raport 5 CDE
    Raport 5 CDE
    Document7 pagini
    Raport 5 CDE
    crismaruion
    Încă nu există evaluări
  • IoT2 Raport
    IoT2 Raport
    Document10 pagini
    IoT2 Raport
    crismaruion
    Încă nu există evaluări
  • Lab 5 Sda
    Lab 5 Sda
    Document12 pagini
    Lab 5 Sda
    crismaruion
    Încă nu există evaluări
  • Lab 7 Sda
    Lab 7 Sda
    Document12 pagini
    Lab 7 Sda
    crismaruion
    Încă nu există evaluări
  • Raport4 Lab4 AC
    Raport4 Lab4 AC
    Document3 pagini
    Raport4 Lab4 AC
    crismaruion
    Încă nu există evaluări
  • Lab 4 Sda
    Lab 4 Sda
    Document14 pagini
    Lab 4 Sda
    crismaruion
    Încă nu există evaluări
  • Lab 6 Sda
    Lab 6 Sda
    Document16 pagini
    Lab 6 Sda
    crismaruion
    Încă nu există evaluări
  • Lab 1-2 Sda
    Lab 1-2 Sda
    Document20 pagini
    Lab 1-2 Sda
    crismaruion
    Încă nu există evaluări
  • Lab 3 Sda
    Lab 3 Sda
    Document14 pagini
    Lab 3 Sda
    crismaruion
    Încă nu există evaluări
  • Laborator 2 APA
    Laborator 2 APA
    Document20 pagini
    Laborator 2 APA
    crismaruion
    Încă nu există evaluări
  • Laboratorul 2 PPE
    Laboratorul 2 PPE
    Document4 pagini
    Laboratorul 2 PPE
    crismaruion
    Încă nu există evaluări
  • Proiect AMSI
    Proiect AMSI
    Document38 pagini
    Proiect AMSI
    crismaruion
    0% (1)
  • Laborator 1 APA
    Laborator 1 APA
    Document14 pagini
    Laborator 1 APA
    crismaruion
    Încă nu există evaluări
  • Examen PPe
    Examen PPe
    Document11 pagini
    Examen PPe
    crismaruion
    100% (2)
  • Raport3 CDE UTM
    Raport3 CDE UTM
    Document2 pagini
    Raport3 CDE UTM
    crismaruion
    Încă nu există evaluări