在调用creat/init函数创建好线程后,就可以用 rt_thread_startup(tid)函数来加入道就绪队列中了。 rt_err_trt_thread_startup(rt_thread_t thread){/* set current priority to initialize priority */thread->current_priority=thread->init_priority;thread->number_mask=1L<<thread->current_priority;/* chang...
//该函数用于将新的任务加入就绪状态voidrt_schedule_insert_thread(structrt_thread*thread){...#if RT_THREAD_PRIORITY_MAX > 32rt_thread_ready_table[thread->number]|=thread->high_mask;//让对应的优先级所在分组的具体位置1,表明就绪#endifrt_thread_ready_priority_group|=thread->number_mask;//让对...
这个number_mask实际上是为了加快查找位图的速度而创建的。它将在rt_schedule函数中发挥作用。 上文已说明,thread->number就表示当前线程优先级在32个字节的位图数组中的字节位置。为了提高效率,rt-thread另外使用了一个u32类型的变量rt_thread_ready_priority_group 来加快速度。如果这32个bit中某一个bit为1,就表示...
1.参数检查2.将current_priority 重新赋值为init_priority3.为number_mask赋值,
thread->high_mask = 1L << (thread->current_priority & 0x07); /* 3bit */ #else thread->number_mask = 1L << thread->current_priority; #endif RT_DEBUG_LOG(RT_DEBUG_THREAD, ("startup a thread:%s with priority:%d\n", thread->name, thread->init_priority)); ...
rt_uint32_t number_mask; /* 当前优先级掩码 */ rt_err_t error; /* 错误码 */ rt...
rt_uint8_t number; /**< 线程优先级对应的组号: current_priority >> 3 */ rt_uint8_t high_mask; /**< 线程位号掩码: (1 << 位号) 位号: (current_priority & 7) */ 1. 2. endif rt_uint32_t number_mask; /**< 组号掩码: (1 << 组号) */ ...
/* 初始优先级*/rt_uint32_t number_mask;...rt_ubase_t init_tick;/* 线程初始化计数值*/rt_ubase_t remaining_tick;/* 线程剩余计数值*/struct rt_timer thread_timer;/* 内置线程定时器*/void(*cleanup)(struct rt_thread*tid);/* 线程退出清除函数*/rt_uint32_t user_data;/* 用户数据*/}...
rt_thread_ready_priority_group|=thread->number_mask; __exit: /* enable interrupt */ rt_hw_interrupt_enable(temp); } 可以明显看出,rt_schedule_insert_thread调用的是rt_list_insert_before,即把当然运行任务插入到其优先级readylist的最后 问题 ...
在调用creat/init函数创建好线程后,就可以用 rt_thread_startup(tid)函数来加入道就绪队列中了。 rt_err_trt_thread_startup(rt_thread_t thread){/* set current priority to initialize priority */thread->current_priority=thread->init_priority;thread->number_mask=1L<<thread->current_priority;/* chang...