rtt建立任務後執行緒何時執行
阿新 • • 發佈:2021-10-22
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會立即執行)。執行緒想執行的話,需要被排程後才能執行。如果執行緒的優先順序夠高的話,會立刻執行,否則需等待排程器排程。
如果,感到此時的自己很辛苦,那告訴自己:容易走的都是下坡路。堅持住,因為你正在走上坡路,走過去,你就一定會有進步。如果,你正在埋怨命運不眷顧,開導自己:命,是失敗者的藉口;運,是成功者的謙詞。命運從來都是掌握在自己的手中,埋怨,只是一種懦弱的表現;努力,才是人生的態度。