rtt创建任务后线程何时运行

void demo_thread_creat(void)
{
    rt_err_t result;

    /* 创建静态线程 : 优先级 16 ,时间片 2个系统滴答 */
    result = rt_thread_init(&thread_test1,
                            "test1",
                            test1_thread_entry, RT_NULL,
                            (rt_uint8_t*)&thread1_stack[0], sizeof(thread1_stack), 15, 2);

    if (result == RT_EOK)
    {
        rt_thread_startup(&thread_test1);
    }

    /* 创建静态线程 : 优先级 15 ,时间片 1个系统滴答 */
    result = rt_thread_init(&thread_test2,
                            "test2",
                            test2_thread_entry, RT_NULL,
                            (rt_uint8_t*)&thread2_stack[0], sizeof(thread2_stack), 15, 1);

    if (result == RT_EOK)
    {
        rt_thread_startup(&thread_test2);
    }

}

void test1_thread_entry(void* parameter)
{
    rt_uint32_t i;

    /* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
    rt_enter_critical();

    g_tmp = 0;
    rt_kprintf("g_tmp=:%d \r\n", g_tmp);
    for(i=0; i<10000; i++)
    {
        g_tmp++;
    }
    rt_kprintf("g_tmp=:%d \r\n", g_tmp);

    /* 调度器解锁 */
    rt_exit_critical();
}

void test2_thread_entry(void* parameter)
{
    rt_thread_delay(1);// 1
    g_tmp++;
}

demo_thread_creat函数执行完了,线程test1_thread_entry才回执行(当初认为执行rt_thread_startup(&thread_test1)后,线程test1_thread_entry会立即执行)。线程想运行的话,需要被调度后才能执行。如果线程的优先级够高的话,会立刻执行,否则需等待调度器调度。

posted @ 2021-10-22 10:01  我爱茜茜公主  阅读(159)  评论(0)    收藏  举报