Example #1
0
/* CTRL线程的主函数 */
static void ThreadCtrlEntry(TArgument data)
{
    TState state;
    TError error;
    TLedMail* pMail = &LedMail;

    while (eTrue)
    {
        /* 控制线程以非阻塞方式发送控制Led点亮的邮件 */
        pMail->Value = LED_ON;
        pMail->Index = LED1;
        state = TclSendMail(&LedMailbox, (TMail*)(&pMail), 0, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* 控制线程以非阻塞方式获取信号量 */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* 控制线程以非阻塞方式发送控制Led熄灭的邮件 */
        pMail->Value = LED_OFF;
        pMail->Index = LED1;
        state = TclSendMail(&LedMailbox, (TMail*)(&pMail), 0, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* 控制线程以阻塞方式获取信号量 */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");
    }
}
Example #2
0
/* Led线程的主函数 */
static void ThreadLedEntry(TArgument arg)
{
    TState state;
    TError error;

    while (eTrue)
    {
        /* Led线程以阻塞方式获取信号量,如果成功则点亮Led */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        if (state == eSuccess)
        {
            EvbLedControl(LED1, LED_ON);
            EvbLedControl(LED2, LED_ON);
            EvbLedControl(LED3, LED_ON);
        }

        /* Led线程以阻塞方式获取信号量,如果成功则熄灭Led */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        if (state == eSuccess)
        {
            EvbLedControl(LED1, LED_OFF);
            EvbLedControl(LED2, LED_OFF);
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
Example #3
0
/* 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 ThreadLed3Entry(TArgument arg)
{
    TState state;
    TError error;

    while (eTrue)
    {
        /* Led线程以阻塞方式获取信号量,如果阻塞被强制解除则点亮Led */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_FLUSH))
        {
            EvbLedControl(LED3, LED_ON);
        }

        /* Led线程以阻塞方式获取信号量,如果阻塞被强制解除则熄灭Led */
        state = TclObtainSemaphore(&LedSemaphore, TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_FLUSH))
        {
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
Example #5
0
/* 字符打印函数,通过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
}