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)传递数据,而不是直接共享变量。
六、多核分区下的配置要点
在 AURIX TC3xx 上落地这套模型时,有几个容易踩坑的地方。第一,Task 与 ISR 必须显式绑定到核,未绑定的对象默认落在主核,可能造成负载不均。第二,跨核激活 Task 需要 OS 支持核间调度请求(通常通过 IPI 中断实现),其延迟比同核激活高一个数量级,实时性要求高的链路应尽量把触发源与处理任务放在同一核。第三,Alarm 的 Counter 若由某个核的 STM 驱动,则所有依赖该 Alarm 的 Task 最好也在同一核,否则会引入跨核抖动。
保护配置上,建议按“功能安全等级 + 实时性等级”划分 OS Application:安全相关且时间敏感的控制任务放在 TRUSTED 分区并绑定到独立核;诊断、通信等非关键任务放在 NON-TRUSTED 分区,并设置执行时间预算。一旦某分区超时或越界,Protection Hook 可记录故障并触发降级,而不影响其它分区的正常运行。