CHibiOS fixes from removing gfxSemCounter()

release/v2.9
inmarket 2017-08-16 17:59:53 +10:00
parent 2b4bd12ffa
commit f0f28e2453
1 changed files with 26 additions and 11 deletions

View File

@ -139,8 +139,13 @@ bool_t gfxSemWait(gfxSem *psem, delaytime_t ms)
bool_t gfxSemWaitI(gfxSem *psem) bool_t gfxSemWaitI(gfxSem *psem)
{ {
if (chSemGetCounterI(&psem->sem) <= 0) #if (CH_KERNEL_MAJOR == 2) || (CH_KERNEL_MAJOR == 3)
return FALSE; if (psem->sem.s_cnt <= 0)
return GFalse;
#elif (CH_KERNEL_MAJOR == 4)
if (psem->sem.cnt <= 0)
return GFalse;
#endif
chSemFastWaitI(&psem->sem); chSemFastWaitI(&psem->sem);
return TRUE; return TRUE;
} }
@ -149,8 +154,13 @@ void gfxSemSignal(gfxSem *psem)
{ {
chSysLock(); chSysLock();
if (psem->sem.s_cnt < psem->limit) #if (CH_KERNEL_MAJOR == 2) || (CH_KERNEL_MAJOR == 3)
chSemSignalI(&psem->sem); if (psem->sem.s_cnt < psem->limit)
chSemSignalI(&psem->sem);
#elif (CH_KERNEL_MAJOR == 4)
if (psem->sem.cnt < psem->limit)
chSemSignalI(&psem->sem);
#endif
chSchRescheduleS(); chSchRescheduleS();
chSysUnlock(); chSysUnlock();
@ -158,19 +168,24 @@ void gfxSemSignal(gfxSem *psem)
void gfxSemSignalI(gfxSem *psem) void gfxSemSignalI(gfxSem *psem)
{ {
if (psem->sem.s_cnt < psem->limit) #if (CH_KERNEL_MAJOR == 2) || (CH_KERNEL_MAJOR == 3)
chSemSignalI(&psem->sem); if (psem->sem.s_cnt < psem->limit)
chSemSignalI(&psem->sem);
#elif (CH_KERNEL_MAJOR == 4)
if (psem->sem.cnt < psem->limit)
chSemSignalI(&psem->sem);
#endif
} }
gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param) gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param)
{ {
if (!stackarea) { if (!stackarea) {
if (!stacksz) stacksz = 256; if (!stacksz) stacksz = 256;
#if (CH_KERNEL_MAJOR == 2) || (CH_KERNEL_MAJOR == 3) #if (CH_KERNEL_MAJOR == 2) || (CH_KERNEL_MAJOR == 3)
return chThdCreateFromHeap(0, stacksz, prio, (tfunc_t)fn, param); return chThdCreateFromHeap(0, stacksz, prio, (tfunc_t)fn, param);
#elif CH_KERNEL_MAJOR == 4 #elif CH_KERNEL_MAJOR == 4
return chThdCreateFromHeap(0, stacksz, "ugfx", prio, (tfunc_t)fn, param); return chThdCreateFromHeap(0, stacksz, "ugfx", prio, (tfunc_t)fn, param);
#endif #endif
} }
if (!stacksz) if (!stacksz)