コード例 #1
0
/* Led线程3的主函数 */
static void ThreadLed3Entry(TArgument data)
{
    TError error;
    TState state;
    TLedMail* pMail;

    while (eTrue)
    {
        /* Led线程以阻塞方式接收邮件 */
        state = TclReceiveMail(&LedMailbox, (TMail*)(&pMail), TCLO_IPC_WAIT,
                               TCLM_MLS2TICKS(1000), &error);
        if ((state != eSuccess) && (error & TCLE_IPC_FLUSH))
        {
            EvbLedControl(LED3, LED_ON);
        }

        /* Led线程以阻塞方式接收邮件 */
        state = TclReceiveMail(&LedMailbox, (TMail*)(&pMail), TCLO_IPC_WAIT,
                               TCLM_MLS2TICKS(1000), &error);
        if ((state != eSuccess) && (error & TCLE_IPC_FLUSH))
        {
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
コード例 #2
0
ファイル: semaphore_example2.c プロジェクト: Arcko/trochili
/* 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), "");
    }
}
コード例 #3
0
/* Led2线程的主函数 */
static void ThreadLed3Entry(TArgument data)
{
    TState state;
    TError error;
    TBitMask pattern;
    TOption option;

    while (eTrue)
    {
        /* Led线程以阻塞方式获取事件,当发现事件标记flush后点亮Led */
        pattern = 0xa2;
        option = TCLO_IPC_WAIT | TCLO_IPC_OR | TCLO_IPC_CONSUME;
        state = TclReceiveFlags(&LedFlags, &pattern, option, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_ON);
        }

        /* Led线程以阻塞方式获取事件,当发现事件标记flush后熄灭Led */
        pattern = 0xa2;
        option = TCLO_IPC_WAIT | TCLO_IPC_OR | TCLO_IPC_CONSUME;
        state = TclReceiveFlags(&LedFlags, &pattern, option, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
コード例 #4
0
/* Led3线程的主函数 */
static void ThreadLed3Entry(TArgument data)
{
    TState state;
    TError error;
    TLedMsg* pMsg;

    while (eTrue)
    {
        /* Led3线程以阻塞方式接收消息,如果发现消息队列FLUSH则熄灭Led3 */
        state = TclReceiveMessage(&LedMQ, (void**)(&pMsg),
                                  TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_ON);
        }

        /* Led3线程以阻塞方式接收消息,如果发现消息队列FLUSH则点亮Led3 */
        state = TclReceiveMessage(&LedMQ, (void**)(&pMsg),
                                  TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
コード例 #5
0
ファイル: mailbox_example4.c プロジェクト: Arcko/trochili
/* Led1线程的主函数 */
static void ThreadLed1Entry(TArgument data)
{
    TState state;
    TError error;

    TLedMail* pMail1;
    TLedMail* pMail2;

    pMail2 = &Led2Mail;
    while (eTrue)
    {
        /* Led1线程以阻塞方式接收Led1控制邮件 */
        state = TclReceiveMail(&Led1MailBox, (TMail*)(&pMail1), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led1线程控制Led1的点亮或熄灭 */
        EvbLedControl(pMail1->Index, pMail1->Value);

        /* Led1线程延时1秒 */
        state = TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");

        /* Led1线程以阻塞方式发送Led2点亮邮件 */
        pMail2->Index = LED2;
        pMail2->Value = LED_ON;
        state = TclSendMail(&Led2MailBox, (TMail*)(&pMail2), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led1线程以阻塞方式接收Led1控制邮件 */
        state = TclReceiveMail(&Led1MailBox, (TMail*)(&pMail1), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led1线程控制Led1的点亮或熄灭 */
        EvbLedControl(pMail1->Index, pMail1->Value);

        /* Led1线程延时1秒 */
        state = TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");

        /* Led1线程以阻塞方式发送Led2熄灭邮件 */
        pMail2->Index = LED2;
        pMail2->Value = LED_OFF;
        state = TclSendMail(&Led2MailBox, (TMail*)(&pMail2), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");
    }
}
コード例 #6
0
/* 用户定时器2的回调函数,间隔1秒,点亮或熄灭Led2 */
static void BlinkLed2(TArgument data)
{
    static TIndex index = 0;
    if (index % 2)
    {
        EvbLedControl(LED2, LED_OFF);
    }
    else
    {
        EvbLedControl(LED2, LED_ON);
    }
    index++;
}
コード例 #7
0
ファイル: mailbox_example3.c プロジェクト: Arcko/trochili
/* 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), "");
        }
    }
}
コード例 #8
0
ファイル: mutex_example1.c プロジェクト: Arcko/trochili
/* Led熄灭线程的主函数 */
static void ThreadLedOffEntry(TArgument data)
{
    TError error;
    TState state;

    while (eTrue)
    {
        /* Led熄灭线程以阻塞方式锁定互斥量,如果成功则熄灭Led */
        state = TclLockMutex(&LedMutex, TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        EvbLedControl(LED1, LED_OFF);

        /* Led熄灭线程延时1秒 */
        state = TclDelayThread(&ThreadLedOff, TCLM_MLS2TICKS(1000), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");

        /* Led熄灭线程释放互斥量 */
        state = TclFreeMutex(&LedMutex, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");
    }
}
コード例 #9
0
ファイル: memory_pool_example.c プロジェクト: Arcko/trochili
/* Led1\Led2\led3线程的主函数 */
static void ThreadLedEntry(TArgument data)
{
    TError error;
    TState state;

    while (eTrue)
    {
        state = TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");
        EvbLedControl(data, LED_ON);

        state = TclDelayThread((TThread*)0, TCLM_MLS2TICKS(1000), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");
        EvbLedControl(data, LED_OFF);
    }
}
コード例 #10
0
ファイル: mailbox_example4.c プロジェクト: Arcko/trochili
/* Led2线程的主函数 */
static void ThreadLed2Entry(TArgument data)
{
    TState state;
    TError error;

    TLedMail* pMail1;
    TLedMail* pMail2;

    pMail1 = &Led1Mail;
    while (eTrue)
    {
        /* Led2线程以阻塞方式发送Led1点亮邮件 */
        pMail1->Index = LED1;
        pMail1->Value = LED_ON;
        state = TclSendMail(&Led1MailBox, (TMail*)(&pMail1), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led2线程以阻塞方式接收Led2控制邮件 */
        state = TclReceiveMail(&Led2MailBox, (TMail*)(&pMail2), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led2线程控制Led2的点亮或熄灭 */
        EvbLedControl(pMail2->Index, pMail2->Value);

        /* Led2线程以阻塞方式发送Led1熄灭邮件 */
        pMail1->Index = LED1;
        pMail1->Value = LED_OFF;
        state = TclSendMail(&Led1MailBox, (TMail*)(&pMail1), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led2线程以阻塞方式接收Led2控制邮件 */
        state = TclReceiveMail(&Led2MailBox, (TMail*)(&pMail2), TCLO_IPC_WAIT, 0, &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_IPC_NONE), "");

        /* Led1线程控制Led1的点亮或熄灭 */
        EvbLedControl(pMail2->Index, pMail2->Value);
    }
}
コード例 #11
0
/* Led线程的线程主函数 */
static void ThreadLed2Entry(TArgument data)
{
    TError error;
    TState state;

    while (eTrue)
    {
        state = TclDelayThread(TCLM_SEC2TICKS(200), &error);
        if(state == eSuccess)
        {
            EvbLedControl(LED2, LED_OFF);
        }

        state = TclDelayThread(TCLM_SEC2TICKS(200), &error);
        if(state == eSuccess)
        {
            EvbLedControl(LED2, LED_ON);
        }
    }
}
コード例 #12
0
ファイル: thread_delay.c プロジェクト: Arcko/trochili
/* Led线程的线程主函数 */
static void ThreadLedEntry(TArgument data)
{
    TError error;
    TState state;
    TThread* pThread;

    /* 参数2为线程的内核参数,由内核自动设置为当前线程的地址 */
    pThread = (TThread*)data;
    while (eTrue)
    {
        EvbLedControl(LED1, LED_ON);
        state = TclDelayThread(pThread, TCLM_SEC2TICKS(1), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");

        EvbLedControl(LED1, LED_OFF);
        state = TclDelayThread(pThread, TCLM_SEC2TICKS(1), &error);
        TCLM_ASSERT((state == eSuccess), "");
        TCLM_ASSERT((error == TCLE_THREAD_NONE), "");
    }
}
コード例 #13
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);
        }
    }
}
コード例 #14
0
/* 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);
        }
    }
}
コード例 #15
0
ファイル: mutex_example2_reset.c プロジェクト: Arcko/trochili
/* Led线程3的主函数 */
static void ThreadLed3Entry(TArgument data)
{
    TState state;
    TError error;

    while (eTrue)
    {
        /* Led线程以阻塞方式获取互斥量,当发现互斥量reset后点亮Led3 */
        state = TclLockMutex(&LedMutex, TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_ON);
        }

        /* Led线程以阻塞方式获取互斥量,当发现互斥量reset后熄灭Led3 */
        state = TclLockMutex(&LedMutex, TCLO_IPC_WAIT, 0, &error);
        if ((state != eSuccess) && (error & TCLE_IPC_RESET))
        {
            EvbLedControl(LED3, LED_OFF);
        }
    }
}
コード例 #16
0
/* Led3线程的主函数 */
static void ThreadLed3Entry(TArgument data)
{
    TState state;
    TError error;
    TLedMsg* pMsg;

    while (eTrue)
    {
        /* Led3线程以阻塞方式接收消息,按照消息内容来点亮或者熄灭Led3 */
        state = TclReceiveMessage(&LedMQ, (void**)(&pMsg), TCLO_IPC_WAIT,
                                  0, &error);
        if (state == eSuccess)
        {
            EvbLedControl(LED3, pMsg->Value);
        }
    }
}
コード例 #17
0
/* Led3线程的主函数 */
static void ThreadLed3Entry(TArgument arg)
{
    TState state;
    TError error;
    TLedMail* pMail;

    while (eTrue)
    {
        /* Led3线程以阻塞方式接收邮件,并根据邮件内容控制Led3的点亮或者熄灭 */
        state = TclReceiveMail(&LedMailbox, (TMail*)(&pMail),
                               TCLO_IPC_WAIT, 0, &error);
        if (state == eSuccess)
        {
            EvbLedControl(LED3, pMail->Value);
        }
    }
}
コード例 #18
0
ファイル: thread_init.c プロジェクト: liuxuming/trochili
/* 线程Led的入口函数 */
static void ThreadLedEntry(TArgument data)
{
    while (eTrue)
    {
        delay(0x8FFFFF);
        EvbLedControl(LED1, LED_ON);

        delay(0x8FFFFF);
        EvbLedControl(LED1, LED_OFF);

        delay(0x8FFFFF);
        EvbLedControl(LED2, LED_ON);

        delay(0x8FFFFF);
        EvbLedControl(LED2, LED_OFF);

        delay(0x8FFFFF);
        EvbLedControl(LED3, LED_ON);

        delay(0x8FFFFF);
        EvbLedControl(LED3, LED_OFF);
    }
}