【发布时间】:2017-06-30 18:38:18
【问题描述】:
在 Autosar 中,可运行对象被映射到任务。由于优先级,任务可以被抢占。
抢占点在哪里?可运行对象之间是否发生抢占?
是可运行的原子执行还是可以在执行期间被抢占?
【问题讨论】:
标签: runnable preemption autosar
在 Autosar 中,可运行对象被映射到任务。由于优先级,任务可以被抢占。
抢占点在哪里?可运行对象之间是否发生抢占?
是可运行的原子执行还是可以在执行期间被抢占?
【问题讨论】:
标签: runnable preemption autosar
抢占的目的是确保其他任务按计划的时间间隔运行。
由于可运行对象在任务的上下文中运行,并且任务可以被抢占,这意味着可运行对象本身可以被抢占。另一个后果是,runnables 只能被其他任务(或中断)中的 runnables 抢占。因此,如果您有可运行的 A 和 B 在同一个任务中运行,那么 A 将永远不会被 B 抢占,反之亦然 - A 和 B 相对于彼此是原子的。
Autosar 进一步支持专有区域,这是一种本质上是临界区的机制。多个 runnable 可以使用同一个独占区域,如果一个 runnable 以 Rte_Enter 进入独占区域,那么在第一个以 Rte_Exit 离开之前,其他 runnable 不能进入同一个独占区域。
【讨论】:
除了上面的答案,我想在 Autosar 中添加一个名为 Cooperative runnable Placement 的概念。根据概念,具有数据访问限制的runnbles被分组为“Cooperative Runnables”,其中该组中的runnables永远不会互相抢占,但可以被不属于该组的runnables抢占.
runnables也是在task的上下文中执行的,如果task是可抢占的,那么属于task的runnables也是可抢占的。
【讨论】: