/* Led线程2的主函数 */ static void ThreadLed2Entry(TArgument arg) { TState state; TError error; while (eTrue) { /* Led线程2点亮Led2 */ EvbLedControl(LED2, LED_ON); /* Led线程2延时1秒后关闭Led2 */ state =TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error); TCLM_ASSERT((state == eSuccess), ""); TCLM_ASSERT((error == TCLE_THREAD_NONE), ""); EvbLedControl(LED2, LED_OFF); /* Led线程2以非阻塞方式释放信号量1 */ state =TclReleaseSemaphore(&LedSemaphore1, TCLO_IPC_DUMMY, 0, &error); TCLM_ASSERT((state == eSuccess), ""); TCLM_ASSERT((error == TCLE_IPC_NONE), ""); /* Led线程2以阻塞方式获取信号量2 */ state = TclObtainSemaphore(&LedSemaphore2, TCLO_IPC_WAIT, 0, &error); TCLM_ASSERT((state == eSuccess), ""); TCLM_ASSERT((error == TCLE_IPC_NONE), ""); } }
/* Led线程的主函数 */ static void ThreadLedEntry(TArgument data) { TState state; TError error; TLedMail* pMail; while (eTrue) { /* Led线程以阻塞方式接收邮件 */ state = TclReceiveMail(&LedMailbox, (TMail*)(&pMail), TCLO_IPC_WAIT, 0, &error); if (state == eSuccess) { /* Led线程控制Led的点亮和熄灭 */ EvbLedControl(pMail->Index, pMail->Value); /* Led线程延时1秒 */ state = TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error); TCLM_ASSERT((state == eSuccess), ""); TCLM_ASSERT((error == TCLE_THREAD_NONE), ""); /* Led线程释放信号量 */ state = TclReleaseSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error); TCLM_ASSERT((state == eSuccess), ""); TCLM_ASSERT((error == TCLE_IPC_NONE), ""); } } }
/* 字符打印函数,通过BSP将字符串输出到评估板的串口 */ static void PrintfString(char* str) { TState state; TError error; /* 当前线程以阻塞方式获取信号量,成功后通过BSP打印字符串 */ #if (THREAD_SYNC_ENABLE) state = TclObtainSemaphore(&UartSemaphore, TCLO_IPC_WAIT, 0, &error); if (state == eSuccess) { TclTrace(str); } /* 字符串完全打印后,当前线程以非阻塞方式释放信号量 */ TclReleaseSemaphore(&UartSemaphore, 0, 0, &error); #else error = error; state = state; TclTrace(str); #endif }