0

我在汽车嵌入式 C 编程领域工作,有人问我项目的操作系统任务系统(AUTOSAR)是什么。我正在使用 Astree 工具链进行静态分析。我不必为我的项目创建操作系统配置,因为它是由其他团队生成的。那么我们的嵌入式系统中的任务是什么?它如何处理大型软件中的数千个 C 和 H 文件?是指我们如何构建项目吗?例如:

void task_OS_10ms_Task(void) {
    Rte_task_Cont_BswStart_10ms();
    FiM_MainFunction();
    DDRC_Proc_ArDebMainFunction_10ms();
    DFES_Proc_Data();
    ComCIL_Adapt_Proc_10ms();
    ComCIL_Co_Proc();
}
void task_OS_1ms_Task(void) {
    Rte_task_Cont_BswStart_1ms();
    Rte_task_Cont_BswEnd_1ms();
} // End of OS_1ms_Task

对于上面的例子,它的平均 6 个函数将在 10 毫秒内执行,还是每个函数在 10 毫秒内执行(总共 60 毫秒)?

4

1 回答 1

0

任务是操作系统管理的最小可调度单元。它相当于“线程”。

任务是执行(用户)代码并由操作系统管理的对象。例如,操作系统在不同的任务(“计划”)之间切换。有两种类型的任务;更多细节参见[15]。基本任务:不能自行阻塞的任务。这意味着它不能等待(OS)事件。扩展任务:可以自行阻塞并等待(OS)事件的任务。(来源:AUTOSAR_SWS_OS.pdf 4.2 版)

您在任务中拥有的是 BSW 模块的可运行实体或主要处理功能(计划功能)。

您在任务名称中的 10ms 并不意味着该任务将每 10ms 执行一次。周期 10ms 是调度表的一部分,必须在 OS 模块中定义。请记住,AUTOSAR OS 不提供时间保护的截止日期监控。WD 堆栈可以处理此缺失的功能。

在您的示例中,所有功能必须每 10 毫秒执行一次。但有时我们可以将一个可运行对象(例如 100 毫秒)映射到 10 毫秒的任务,在这种情况下,RTE 将生成事件/计数器,以便能够每 100 毫秒执行一次您的可运行对象。

于 2022-01-27T09:52:57.070 回答