Autosar 启动流程详解

来源:公众号“汽车电子与软件”
2021-06-22
4336

以下文章来源于AUTOSAR嵌入式实战 ,作者OneSong1024

AUTOSAR嵌入式实战AUTOSAR嵌入式实战

专注于AUTOSAR嵌入式软件领域的知识分享与交流,包括AUTOSAR MCAL、BSW、OS、RTE介绍,工具链及源码的深入挖掘分析,代码流程及调试过程演示等

很多小伙伴在建立AUTOSAR工程,特别是多核工程时,对于程序的启动不是很了解,卡在启动相关配置的环节,不知道如何调试。本篇主要旨在描述系统上电后,如何运行到Default_Init_Task。



一、启动入口地址:

1. 中断向量表的第二个地址存的是reset_handle的地址,即为启动地址。
1.jpg


2.多核工程,存在多个中断向量表,楼主用的是芯片为3core


2.jpg

3.LD文件中将中断向量标定中存储的地址标号与实际函数入口地址关联


3.jpg

4.实际代码中入口函数

4.jpg

从map跟hex文件中check入口地址即为中断向量表第二个向量


5.jpg


二、启动相关配置如何实现:


6.jpg
7.jpg


三、调试信息:


8.jpg

注:调启动代码时,需要将调试器运行脚本更改中go main注释掉,否则会跳过启动段吗,直接走到main函数。


9.jpg



10.jpg


启动到Main函数之前的流程如上图,主要是进行一些栈的初始化,ROM的拷贝。




四、启动Main函数之后,进入主程序,启动交由EcuM模块接管



11.jpg




12.jpg


EcuM_Al_DriverInitOne();用户定义的初始化函数,通常包含部分硬件初始化Mcu_Init; Port_Init.工具配置如下:



13.jpg



五、Ecum_StartOS 接管启动,启动多核(非主核,楼主本人的例程启动core1,core2),并启动本核所在的初始化任务


14.jpg

注:startos启动过程中,会多次同步,Os_BarrierSynchronizeInternal



六、OS启动成功后,会调度初始化任务,Default_Init_Task进入

EcuM_StartupTwo,重新被EcuM接管。后续会EcuM及BswM会进行启动,休眠的过程管理。不在本章中描述,后续会有独立章节进行分析。


初始化Hook Thread Context结构体

15.jpg


16.jpg

17.jpg

将自启动任务状态设置为Ready,插入调度表中。

18.jpg


19.jpg

开启调度表进入初始化任务

20.jpg


图片

END


收藏
点赞
2000