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会立即执行)。线程想运行的话,需要被调度后才能执行。如果线程的优先级够高的话,会立刻执行,否则需等待调度器调度。
如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。

浙公网安备 33010602011771号