2. AUTOSAR OS在AURIX上的任务模型

AUTOSAR OS 是静态配置的实时操作系统,它在 AURIX TC3xx 多核平台上把“谁在哪个核上跑、什么时候跑、能访问什么”全部在编译期确定下来。理解这一章的关键,不是记住六个名词,而是看清它们之间的触发关系、绑定关系与保护边界:Task 是调度实体,ISR 是硬件中断入口,Alarm 与 Schedule Table 是时间触发源,Event 是任务间的同步手段,OS Application 则是把上述对象按核与权限打包的容器。

一、Task:调度与状态的基本单位

AUTOSAR OS 的 Task 分为基本任务(Basic Task)与扩展任务(Extended Task)。基本任务只有挂起(Suspended)、就绪(Ready)、运行(Running)三态,执行完即回到挂起;扩展任务额外拥有等待(Waiting)态,可以调用 WaitEvent() 阻塞等待事件。在 AURIX 上,每个 Task 通过配置绑定到某个 OS Core,并指定优先级(数值越大优先级越高)。

调度策略上,同一核内采用固定优先级抢占式调度:高优先级 Task 就绪即抢占低优先级 Task。若两个 Task 配置为同一优先级,则按激活顺序排队,不进行时间片轮转(除非显式配置 SCHEDULE 为轮转)。一个典型配置示例如下:

TASK EngineCtrlTask {
  PRIORITY = 10;
  ACTIVATION = 1;          /* 单次激活 */
  SCHEDULE = FULL;         /* 可抢占 */
  AUTOSTART = FALSE;
  EVENT = Ev_CrankDone;    /* 扩展任务可等待的事件 */
};

需要强调的是:Task 的栈空间、优先级、激活次数都在配置阶段静态分配,运行时不能动态创建任务。这既是实时性可分析的基础,也是 AURIX 上内存分区的前提。

二、ISR:中断服务例程的两类形态

AUTOSAR OS 把中断分为 Category 1 与 Category 2。Category 1 ISR 不经过 OS,直接由硬件向量进入,执行期间不产生调度,适合极短、对延迟极敏感的响应;Category 2 ISR 由 OS 接管,可以调用 ActivateTask()、SetEvent() 等 OS 服务,退出时触发调度检查。在 AURIX 上,Category 2 ISR 通常绑定到某个核的 SRC 中断节点,并映射到具体优先级组(如 SRPN)。

工程上常见的做法是:ISR 只做“取数据 + 置事件/激活任务”,把耗时处理交给 Task。例如 ADC 转换完成中断里只读取结果并 SetEvent(Ev_AdcDone),由扩展任务在等待态被唤醒后做滤波与标定。

三、Alarm 与 Schedule Table:时间触发源

Alarm 绑定到一个计数器(Counter),当计数器达到设定值时触发动作,动作可以是激活 Task、设置 Event 或调用 Alarm Callback。Counter 可由硬件定时器(如 STM、GPT12)驱动,也可由 OS 软件计数。Alarm 支持单次与周期两种模式,周期 Alarm 是周期任务的主要触发方式。

Schedule Table 则是 Alarm 的“编排版”:一张表上挂多个到期点(Expiry Point),每个到期点可同步激活多个 Task 或设置多个 Event,并支持与全局时间同步(如通过 CAN 或以太网同步到全局时基)。它适合需要严格相位关系的场景,例如电机控制中“采样—计算—PWM 更新”三个动作必须在同一控制周期内按固定顺序触发。

四、Event:扩展任务的同步机制

Event 只能被扩展任务等待,且一个 Task 可等待多个 Event 的“或”关系。设置 Event 的可以是 ISR、Alarm、Schedule Table 或其它 Task。当事件被设置且该 Task 处于等待态时,Task 转入就绪态参与调度。Event 不携带数据,只传递“条件已满足”的信号,因此常与全局变量或消息缓冲区配合使用。

五、OS Application 与多核分区保护

OS Application 是 AUTOSAR OS 的“分区容器”。每个 OS Application 拥有独立的 Task、ISR、Alarm、Schedule Table 和 Counter 集合,并绑定到特定核。在 AURIX 上,这一机制与 MPU(内存保护单元)和核间通信结合,形成空间隔离:某个 OS Application 的 Task 越界访问另一个分区的数据会触发保护异常(Trap),由 OS 的 Protection Hook 处理。

保护机制还包括时间保护(执行时间预算、到达率限制)和服务保护(限制可调用的 OS API 集合)。配置时通常为每个 OS Application 指定 TRUSTED 或 NON-TRUSTED,非信任分区只能调用受限服务。多核之间通过 IOC(Inter-OS-Application Communicator)传递数据,而不是直接共享变量。

时间触发源 Counter(STM/GPT12) Alarm(单次/周期) Schedule Table(多到期点) 硬件中断源 ADC / CAN / PWM 事件 SRC 节点 → SRPN 优先级 Category 1 / 2 ISR AUTOSAR OS 调度核心 固定优先级抢占调度 Task 状态机管理 Event 同步与唤醒 调度检查点(Schedule Point) Protection Hook 入口 Task(绑定到 OS Core) Basic Task:Suspended→Ready→Running Extended Task:+ Waiting(WaitEvent) 优先级静态配置,同核抢占 Event(同步信号) SetEvent 来源:ISR / Alarm / Task 仅扩展任务可 WaitEvent 不携带数据,配合全局缓冲 OS Application 分区与保护边界(AURIX MPU + 时间/服务保护) OS App A(Core 0,TRUSTED) Task / ISR / Alarm / ST 可调用完整 OS API OS App B(Core 1,NON-TRUSTED) 受限 API + 时间预算 越界访问触发 Trap OS App C(Core 2,TRUSTED) IOC 跨分区通信 独立栈与数据段 跨 OS Application 数据传递经 IOC,不直接共享变量

六、多核分区下的配置要点

在 AURIX TC3xx 上落地这套模型时,有几个容易踩坑的地方。第一,Task 与 ISR 必须显式绑定到核,未绑定的对象默认落在主核,可能造成负载不均。第二,跨核激活 Task 需要 OS 支持核间调度请求(通常通过 IPI 中断实现),其延迟比同核激活高一个数量级,实时性要求高的链路应尽量把触发源与处理任务放在同一核。第三,Alarm 的 Counter 若由某个核的 STM 驱动,则所有依赖该 Alarm 的 Task 最好也在同一核,否则会引入跨核抖动。

保护配置上,建议按“功能安全等级 + 实时性等级”划分 OS Application:安全相关且时间敏感的控制任务放在 TRUSTED 分区并绑定到独立核;诊断、通信等非关键任务放在 NON-TRUSTED 分区,并设置执行时间预算。一旦某分区超时或越界,Protection Hook 可记录故障并触发降级,而不影响其它分区的正常运行。

配置检查建议:确认每个 Task 的核绑定与优先级、每个 ISR 的 Category 与 SRPN、每个 Alarm 的 Counter 归属与周期、每个 Event 的设置者与等待者是否在同一 OS Application 内,以及跨分区通信是否全部走 IOC。