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)
Perche' investire su Unix
Un libro trovato nel libero scambio alla Coop su cio' che poteva essere e non e' stato...interessante la storia su Unix del primo c...
-
Per lo shield WiFly e' stata effettuata la patch descritta qui Per la connessione del lettore Rfid si usano i seguenti pin VCC ...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
Nessun commento:
Posta un commento