freeRTOS + SPI + semafory

Martin Persich persich na transcon.cz
Pondělí Duben 25 18:19:56 CEST 2016


Podle mého by měla stačit klasika:

1. na počátku vytvořit semafor:

xSemaphoreHandle xSemaphoreSpiMutex;

#define    SPI_ACCESS_BLOCK_TIME        ((portTickType)1000)  // Waiting 
time for mutexes

if((xSemaphoreSpiMutex=xSemaphoreCreateMutex())==NULL) {
   // *** some error ***
}


2. v každém procesu pak před přístupem na SPI rozhraní použít:

if(xSemaphoreTake(xSemaphoreSpiMutex,SPI_ACCESS_BLOCK_TIME)==pdTRUE) {
        // we were able to obtain the semaphore and can now access the 
shared resource

    // ... obsluha SPI zařízení

    xSemaphoreGive(xSemaphoreSpiMutex);
        // we have finished accessing the shared resource, release the 
semaphore
}


Každý proces tak bude čekat, než skončí komunikace konkurenčního procesu. To 
nemůže nefungovat. :-)

Martin. persich na transcon.cz


----- Original Message ----- 
From: "Michal Grunt" <michal.grunt na gmail.com>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Monday, April 25, 2016 4:59 PM
Subject: freeRTOS + SPI + semafory


Zdravím, mám tu jednu převzatou aplikaci, kterou jsem si upravil podle
obrazu svého. Ale musel jsem k do ní přidat jednu SPI periférii navíc
takže tam jsou nyní dvě. Odděleně mi to funguje, ale dohromady
bohužel. Viděl bych to na problém "hádání se" (každá SPI periférie
běží v jiném vláknu). Jak správně nastavit semafory tak, aby když
komunikuje jedno SPI zařízení a v tu dobu bude chtít přistupovat na
sběrnici druhý tak aby počkalo?

Děkuji
MG
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list





Další informace o konferenci Hw-list