嵌入式操作系统内核原理和开发(优先级的修改)
作者:网络转载 发布时间:[ 2012/10/24 10:37:01 ] 推荐标签:
这个函数是系统本身提供的一个函数,内容不算少,但是重点可以放在两个子函数上面。一个部分是函数chg_pri_mutex,另外一个函数是change_interal_task_priority。前者判断当前优先级是否可以修改,后者判断如何对当前的任务进行修改,后面我们会看到会对这个问题有一个详细的说明。
RAW_U8 chg_pri_mutex(RAW_TASK_OBJ *tcb, RAW_U8 priority, RAW_U16 *error)
{
RAW_MUTEX *mtxcb;
RAW_U8 hi_pri, low_pri, pri;
RAW_TASK_OBJ *first_block_task;
LIST *block_list_head;
hi_pri = priority;
low_pri = 0;
mtxcb = (RAW_MUTEX *)(tcb->block_obj);
if (mtxcb) {
/*if it is blocked on mutex*/
if (mtxcb->common_block_obj.object_type == RAW_MUTEX_OBJ_TYPE) {
if (mtxcb->policy == RAW_MUTEX_CEILING_POLICY) {
pri = mtxcb->ceiling_prio;
if (pri > low_pri) {
low_pri = pri;
}
}
}
}
/* Locked Mutex */
pri = hi_pri;
for (mtxcb = tcb->mtxlist; mtxcb != 0; mtxcb = mtxcb->mtxlist) {
switch (mtxcb->policy) {
case RAW_MUTEX_CEILING_POLICY:
pri = mtxcb->ceiling_prio;
if ( pri > low_pri ) {
low_pri = pri;
}
break;
case RAW_MUTEX_INHERIT_POLICY:
block_list_head = &mtxcb->common_block_obj.block_list;
if (!is_list_empty(block_list_head)) {
first_block_task = list_entry(block_list_head->next, RAW_TASK_OBJ, task_list);
pri = first_block_task->priority;
}
break;
default:
/* nothing to do */
break;
}
if ( pri < hi_pri ) {
hi_pri = pri;
}
}
if (priority < low_pri) {
*error = RAW_EXCEED_CEILING_PRIORITY;
return RAW_EXCEED_CEILING_PRIORITY;
}
*error = RAW_SUCCESS;
return hi_pri;
}
相关推荐
更新发布
功能测试和接口测试的区别
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