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