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)
Unmixing iperspettrale di campioni di terreno naturale
Aggiornamento Ho trovato che USGS Spectral library mette a disposizione anche degli spettri Fieldspec (2151 bande da 350 a 2500 nm) di campi...
-
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