diff options
author | inmarket <andrewh@inmarket.com.au> | 2014-03-14 07:39:02 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2014-03-14 07:39:02 +1000 |
commit | 58cf2d2b35542166f1a4e50a83bcf28ff33574a5 (patch) | |
tree | b3cbb065b21591b82a31457b41be0337e814ce60 /src/gos | |
parent | 6f54bde79c553301a35535a0a71a4a09b181abfa (diff) | |
download | uGFX-58cf2d2b35542166f1a4e50a83bcf28ff33574a5.tar.gz uGFX-58cf2d2b35542166f1a4e50a83bcf28ff33574a5.tar.bz2 uGFX-58cf2d2b35542166f1a4e50a83bcf28ff33574a5.zip |
Add SemWaitI() to FreeRTOS
Diffstat (limited to 'src/gos')
-rw-r--r-- | src/gos/freertos.c | 14 | ||||
-rw-r--r-- | src/gos/freertos.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/gos/freertos.c b/src/gos/freertos.c index 872807d1..e3be4f28 100644 --- a/src/gos/freertos.c +++ b/src/gos/freertos.c @@ -107,6 +107,20 @@ bool_t gfxSemWait(gfxSem* psem, delaytime_t ms) return FALSE; } +bool_t gfxSemWaitI(gfxSem* psem) +{ + portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + psem->counter--; + + if (xSemaphoreTakeFromISR(psem->sem,&xHigherPriorityTaskWoken) == pdTRUE) + return TRUE; + + psem->counter++; + + return FALSE; +} + void gfxSemSignal(gfxSem* psem) { taskENTER_CRITICAL(); diff --git a/src/gos/freertos.h b/src/gos/freertos.h index dc98185f..f15ca910 100644 --- a/src/gos/freertos.h +++ b/src/gos/freertos.h @@ -94,6 +94,7 @@ void gfxSleepMicroseconds(delaytime_t ms); void gfxSemInit(gfxSem* psem, semcount_t val, semcount_t limit); void gfxSemDestroy(gfxSem* psem); bool_t gfxSemWait(gfxSem* psem, delaytime_t ms); +bool_t gfxSemWaitI(gfxSem* psem); void gfxSemSignal(gfxSem* psem); void gfxSemSignalI(gfxSem* psem); #define gfxSemCounterI(psem) ((psem)->counter) |