AutoSAR实战:EcuM 启动时序实战

AutoSAR实战:EcuM 启动时序实战

开篇介绍

入门ECUM的启动序列是基于《EcuM 汽车开放系统架构(Autosar)规范》中定义的启动序列。本博客将带你了解在 ETAS 中配置ECUM的启动序列。由于特定硬件代码的原因,不同芯片之间会略有差异,但启动序列会保持不变。本特定应用说明所基于瑞萨的RH850芯片。

AUTOSAR(AUTomotive Open System ARchitecture)中的ECUM(ECU Manager)模块在系统启动过程中承担着关键的协调与管理职责。其启动流程和工作原理涉及多个阶段,旨在确保ECU(Electronic Control Unit)及其相关软件组件能够按照预定顺序和条件正确初始化。下面我们来介绍一下启动流程。

启动流程概述

启动流程通常分为多个阶段,包括硬件初始化、操作系统初始化、BswM(Basic Software Manager)启动以及应用程序启动。ECUM模块在这些阶段中扮演协调者的角色,确保每个步骤在适当的时机执行,并满足依赖条件。

硬件初始化
在ECU上电或复位后,首先进行的是硬件初始化。这一阶段主要由启动代码(Startup Code)负责,完成诸如设置时钟、初始化内存控制器等任务。启动代码通常由芯片供应商提供,并根据具体硬件平台进行定制。

操作系统初始化
硬件初始化完成后,进入操作系统初始化阶段。此时,ECUM模块负责启动操作系统内核,包括创建必要的任务、中断服务例程(ISRs)以及配置调度策略。操作系统初始化完成后,ECUM会继续执行一些额外的初始化步骤,例如配置系统时钟、初始化通信接口等,以确保系统处于可运行状态。

BswM启动
在操作系统初始化完成后,ECUM将控制权移交给BswM模块。BswM负责协调基础软件层(BSW)的启动过程,包括激活通信栈、启动诊断服务、初始化网络管理模块等。在此过程中,ECUM与BswM协同工作,确保各个模块按照正确的顺序启动。

应用程序启动
当基础软件层完成初始化后,应用程序层开始启动。ECUM在此阶段主要负责监控应用程序的启动状态,并提供必要的支持,例如管理应用程序之间的依赖关系、协调启动顺序等。应用程序启动完成后,系统进入正常运行状态。

1. 硬件复位

启动的第一阶段是从微控制器上的Vector Table复位向量开始,执行微控制器特定的启动代码。这通常包括初始化堆栈指针和内存分配。这段代码最终会导致从应用程序跳转到主代码。进入应用程序的第一步是执行 EcuM_Init()。

2. 初始化操作系统

在 EcuM_Init() 中首先执行的操作之一是调用 EcuM_AL_SetProgrammableInterrupts。此调用可在此处的配置中启用/禁用:

这一步至关重要,因为在此处会调用Os_InitializeVectorTable() 。这是一个操作系统应用程序编程接口(API),负责让微控制器做好运行操作系统的准备,并激活中断。如果不进行此调用,中断服务程序(ISR)和操作系统OS将无法正常运行。

需要明确的是:此时中断服务程序不会立即开始运行,进行这一初始化步骤是为了确保中断服务程序能够正常工作,但只有在调用StartOS之后运行OS_Main时,它们才会启动。

Os_InitializeVectorTable 的一般情况

上面展示的是 RH850 端口的用例,但一般来说,Os_InitializeVectorTable 可以在以下两个位置之一调用一次:

在非 AUTOSAR 系统中,应在 Os_Main() 中调用。
在 AUTOSAR 系统中,应通过 EcuM 调用。

不过,如果将其配置为在这两个位置都调用,从而连续调用两次,它只会用自身覆盖初始化内容。因此,要是向量表被配置为初始化两次,影响也不大(只要是在操作系统启动之前完成即可)。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容