嵌入式操作系统内核原理和开发(优先级的修改)
作者:网络转载 发布时间:[ 2012/10/24 10:37:01 ] 推荐标签:
上面的代码还是比较复杂的,我们看到其实任务的优先级不是可以随便修改的,因为当前任务可能已经占有了许多互斥量资源,而这些互斥量资源其实是有约束条件的。如果占有的互斥量类型是那种带优先级的互斥量,那么必须找出的那个低优先级的互斥量,至少修改的任务优先级不能比它高。剩下的工作是在继承优先级的体制下寻找到高的优先级,仅此而已。
RAW_U16 change_interal_task_priority(RAW_TASK_OBJ *task_ptr, RAW_U8 new_priority)
{
RAW_U8 old_pri;
switch (task_ptr->task_state) {
case RAW_RDY:
remove_ready_list(&raw_ready_queue, task_ptr);
task_ptr->priority = new_priority;
if (task_ptr == raw_task_active) {
add_ready_list_head(&raw_ready_queue, task_ptr);
}
else {
add_ready_list_end(&raw_ready_queue, task_ptr);
}
break;
case RAW_DLY: /* Nothing to do except change the priority in the OS_TCB */
case RAW_SUSPENDED:
case RAW_DLY_SUSPENDED:
task_ptr->priority = new_priority; /* Set new task priority*/
break;
case RAW_PEND:
case RAW_PEND_TIMEOUT:
case RAW_PEND_SUSPENDED:
case RAW_PEND_TIMEOUT_SUSPENDED:
old_pri = task_ptr->priority;
task_ptr->priority = new_priority;
change_pend_list_priority(task_ptr);
#if (CONFIG_RAW_MUTEX > 0)
mtx_chg_pri(task_ptr, old_pri);
#endif
break;
default:
#if (CONFIG_RAW_ASSERT > 0)
RAW_ASSERT(0);
#endif
return RAW_STATE_UNKNOWN;
}
return RAW_SUCCESS;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11