RTEMS 任务管理指令:优先级与改变模式
9.4.9: TASK_SET_PRIORITY- 任务优先级置位
%A
%A 函数原型 :
%A
%A rtems_status_code rtems_task_set_priority(
%A
%A rtems_id id,
%A
%A rtems_task_priority new_priority,
%A
%A rtems_task_priority *old_priority
%A
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 任务优先级成功置位
%A
%A RTEMS_INVALID_ID- 无效任务ID标识
%A
%A RTEMS_INVALID_ADDRESS- 无效的回返参数指针
%A
%A RTEMS_INVALID_PRIORITY- 无效的任务优先级
%A
%A 描述:
%A
%A 该函数设置ID标识指定任务的优先级。可以通过设置id为RTEMS_SELF来更该当前任务的优先级。当 new_priority不等于RTEMS_CURRENT_PRIORITY 时,指定的任务早先的优先级将存储在在old_priority参数中。 当 new_priority和RTEMS_CURRENT_PRIORITY相同,指定的任务现在的优先级存储在old_priority中。有效的优先级是从1到255的整数。
%A
%A 注意:
%A
%A 如果调用者可以被抢占,而且改变优先级后,有任务的优先级高于当前任务的优先级,那么当前执行的任务可能被抢占。
%A
%A 设定不在本地结点上的全局任务的优先级将会对遥远的结点产生一个改变指定任务优先级的请求。
%A
%A 如果被ID标识指定的任务拥有使用优先级继承算法的二进制信号量,那么任务的优先级不能够被立刻降低。如果任务的优先级立刻被降低,就会产生优先级反转。当任务已释放所有的优先级继承二进信号量的时候,他的优先级的才会降低。无论是否使用优先级继承二进制信号量,任务的优先级都可以提高。
%A 9.4.10: TASK_MODE- 变化现在任务的模式
%A
%A 函数原型:
%A
%A rtems_status_code rtems_task_mode(
%A rtems_mode mode_set,
%A rtems_mode mask,
%A rtems_mode *previous_mode_set
%A );
%A
%A 返回值代表的状态:
%A
%A RTEMS_SUCCESSFUL- 任务模式置位成功地
%A
%A RTEMS_INVALID_ADDRESS- previous_mode_set是空值
%A
%A 描述:
%A
%A 该函数改变任务的执行模式。任务的执行模式包括可否抢占、timeslicing、异步的信号处理、以及中断等级。为了改变执行模式,必须指定新的模式mode_set和模式掩码mask。
%A
%A 注意:
%A
%A 如果调用者的新模式支持被抢占,而且有任务的优先级高于当前任务的优先级,那么当前执行的任务可能被抢占。
%A
%A 如果抢先被无效,将模式设置成timeslicing也没有意义。希望任务是分时的,那么必须同时设定分时状态位和抢占状态位。
%A
%A 如果一个任务希望获得它的现在执行模式,而不是修改它。可以将该函数的mask值设置成RTEMS_CURRENT_MODE。
%A
%A 如果要暂时屏蔽ASR,任务在调用该函数时可以将mode参数设置成RTEMS_NO_ASR。
%A
%A 任务模式常量和每个模式的对应掩码常量的如下所示:
%A
%A 模式常量 掩码常量 描述
%A
%A RTEMS_PREEMPT RTEMS_PREEMPT_MASK 使抢占调度有效
%A
%A RTEMS_NO_PREEMPT RTEMS_PREEMPT_MASK 使抢占调度对该任务无效
%A
%A RTEMS_NO_TIMESLICE RTEMS_TIMESLICE_MASK 使分时无效
%A
%A RTEMS_TIMESLICE RTEMS_TIMESLICE_MASK 使分时有效
%A
%A RTEMS_ASR RTEMS_ASR_MASK 使 ASR 有效
%A
%A RTEMS_NO_ASR RTEMS_ASR_MASK 使 ASR 无效
%A
%A RTEMS_INTERRUPT_LEVEL(0) RTEMS_INTERRUPT_MASK 使当前任务能立刻对所有中断产生响应
%A
%A RTEMS_INTERRUPT_LEVEL(n) RTEMS_INTERRUPT_MASK 置位中断等级为 n
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。