I semafori binari (o Mutex) sono metodi per stabilire per un task per capire se una risorsa condivisa e' occupata da un altro task (e quindi non utilizzabile) oppure e' disponibile
In questo esempio sono creati due task che ogni 5 secondi si sovrappongono e cercano entrambi di scrivere sulla porta seriale.
----------------------------------------------------------------------------------
#include <Arduino_FreeRTOS.h>
#include <semphr.h>
SemaphoreHandle_t semaforo;
void blink_even( void *pvParameters );
void blink_odd( void *pvParameters );
void setup() {
Serial.begin(9600);
if ( semaforo == NULL ) {
semaforo = xSemaphoreCreateMutex();
if ((semaforo) != NULL)
xSemaphoreGive((semaforo));
}
// crea i due task
xTaskCreate(blink_even,(const portCHAR *)"BlinkEven",128,NULL,3,NULL);
xTaskCreate(blink_odd,(const portCHAR *)"BlinkOdd",128,NULL,2,NULL);
}
void loop()
{
}
void blink_even( void *pvParameters __attribute__((unused)) )
{
for (;;)
{// qui viene testato se il semaforo e' settato, se la risorsa e'occupata riprova per 5 tick ..in caso la risorsa
// rimanga occupata abbandona
if (xSemaphoreTake(semaforo, ( TickType_t ) 5 ) == pdTRUE )
{
Serial.println("Even");
xSemaphoreGive(semaforo);
}
vTaskDelay( 5000 / portTICK_PERIOD_MS );
}
}
void blink_odd( void *pvParameters __attribute__((unused)) )
{
for (;;)
{
if (xSemaphoreTake(semaforo, ( TickType_t ) 5 ) == pdTRUE )
{
Serial.println("Odd");
xSemaphoreGive(semaforo);
}
vTaskDelay( 1000 / portTICK_PERIOD_MS );
}
}
Iscriviti a:
Commenti sul post (Atom)
Montagne frattali
Negli anni 90 quando i miei amici matematici leggevano (Ri)creazioni al calcolatore di Dewdney (vedi anche pag. 107 del libro The Magic Mac...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
Nessun commento:
Posta un commento