rtems:任务执行模式和参数
.2.5: 任务执行模式
%A
%A 任务的执行模式是下列四种状态的组合:
%A
%A *
%A 抢占态(preemption)
%A *
%A ASR处理
%A *
%A 时间片分片(timeslicing)
%A *
%A 中断等级
%A
%A 任务执行模式是任务调度的一个辅助手段,他可以改变任务的执行环境。RTEMS使用数据类型rtems_task_mode来处理任务执行模式。
%A
%A 抢占态状态字用于屏蔽RTEMS调度器的抢占式调度,也就是说该状态字决定了对应的任务是否会被其他任务剥夺对处理器的占用。如果抢占态状态字设置成无效 (RTEMS_NO_PREEMPT), 即使一个较高的优先级任务被准备好,只要当前是在运行状态中,任务将会保留对处理器的控制。如果抢占态状态字使能(RTEMS_PREEMPT),那么当一个较高的优先级任务进入准备队列,处理器将会立刻从现在的任务被取走而且给较高的优先级任务。
%A
%A RTEMS 调度程序将根据timeslicing分量来决定处理器如何被分派给具有相等优先级的任务。 如果 timeslicing被使能 (RTEMS_TIMESLICE),RTEMS将会使用时间片轮转策略调度具有相同优先级的任务。也就是说RTEMS将会限制数量每个任务占用处理器的时间。每个任务可以运行的实现在配置表中初始化。如果timeslicing 设置成无效 (RTEMS_NO_TIMESLICE), 那么然后任务将会一直在处理器中运行,直到一个较高的优先级的任务将其换出。 如果设置了 RTEMS_NO_PREEMPT,那么配置表中timeslicing分量被调度程序忽略。
%A
%A 异步信号处理分量用来配置任务何时处理接收到的信号。如果激活了异步信号处理(RTEMS_ASR), 那么送给该任务的信号将会在任务下一次执行的时候被处理。 如果信号处理被设置为无效(RTEMS_NO_ASR),那么所接收到的信号将不会被处理。任务只有通过设置RTEMS_ASR才能处理这些挂起的信号。
%A
%A 中断等级分量是用来决定当任务正在运行的时候,哪一个中断将有效。 RTEMS_INTERRUPT_LEVEL(n) 叙述任务将会在第n级中断运行。
%A
%A RTEMS_PREEMPT- 抢占模式有效 (默认)
%A
%A RTEMS_NO_PREEMPT- 非抢占模式
%A
%A RTEMS_NO_TIMESLICE- 时间片轮转失效(默认)
%A
%A RTEMS_TIMESLICE- 时间片算法有效
%A
%A RTEMS_ASR- 异步处理有效(默认)
%A
%A RTEMS_NO_ASR- 异步处理无效
%A
%A RTEMS_INTERRUPT_LEVEL-(0) 使所有的中断都有效 (默认)
%A
%A RTEMS_INTERRUPT_LEVEL(n)- 任务在第n级中断运行
%A
%A 默认模式的置位可能被通过设置RTEMS_DEFAULT_MODES 常量来改变。
%A 9.2.6: 获取任务参数
%A
%A 对于所有的 RTEMS 任务,当他们开始或重新开始的时候,会传递给任务创建进程一个参数。该参数通常用来向任务传达启动信息。 定义一个存取参数的任务最简单的例子如下::
%A
%A rtems_task user_task(
%A
%A rtems_task_argument argument
%A
%A );
%A
%A rtems_task_argument实际上是一个无符号的32位整数。如果任务启动需要传入两个或者两个以上的启动参数,那么可以把参数argument作为一个参数列表的索引传递进去。
%A%A
%A
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。