void ThreadC (void *arg) { while (1) { nOS_SemTake(&semC, NOS_WAIT_INFINITE); nOS_SemGive(&semB); } }
void nOS_SignalProcess (void) { nOS_StatusReg sr; nOS_Signal *signal = NULL; nOS_SignalCallback callback = NULL; void *arg = NULL; nOS_EnterCritical(sr); if (nOS_SemTake (&_signalSem, #if (NOS_CONFIG_SIGNAL_THREAD_ENABLE > 0) NOS_WAIT_INFINITE #else NOS_NO_WAIT #endif ) == NOS_OK) { signal = (nOS_Signal *)nOS_GetHeadOfList(&_signalList); if (signal != NULL) { if (signal->state & NOS_SIGNAL_RAISED) { signal->state = (nOS_SignalState)(signal->state &~ NOS_SIGNAL_RAISED); nOS_RemoveFromList(&_signalList, &signal->node); callback = signal->callback; arg = signal->arg; } } } nOS_LeaveCritical(sr); if (callback != NULL) { callback(signal, arg); } }
void ThreadA (void *arg) { while(true) { nOS_Print("%s running\n", nOS_ThreadGetName(NULL)); nOS_SemTake(&semA, NOS_WAIT_INFINITE); } }
void ThreadA (void *arg) { NOS_UNUSED(arg); while (1) { nOS_SemTake(&semA, NOS_WAIT_INFINITE); } }
void ThreadB (void *arg) { NOS_UNUSED(arg); while (1) { nOS_SemTake(&semB, NOS_WAIT_INFINITE); nOS_SemGive(&semA); } }
void nOS_TimerProcess (void) { if (nOS_SemTake (&_timerSem, #if (NOS_CONFIG_TIMER_THREAD_ENABLE > 0) NOS_WAIT_INFINITE #else NOS_NO_WAIT #endif ) == NOS_OK) { nOS_WalkInList(&_timerList, _TickTimer, NULL); } }
void ThreadA (void *arg) { while (1) { nOS_SemTake(&semA, NOS_WAIT_INFINITE); } }