AutoSAR系列讲解(入门篇)4.9-BSW小结

news2024/9/22 8:31:58


首先,要恭喜各位,最为枯燥难懂的一章你已经看完了。也许现在你还是一头雾水,但是相信大部分人都差不多,不必着急,因为AutoSAR单纯看理论最终也就只能看到这个程度了。所以看不太懂的小伙伴在这里先给自己一个定位:
1. 我已经认认真真的看完了前面的内容,并且基本掌握了BSW中每个模块是干嘛的,在脑海中已经能将每个功能需要哪些模块大致给画出来了。那么掌握到这种程度就可以继续往下看,之后就可以进入下一章了,关于BSW更加细节的东西就要在实践篇中继续深入了。
2. 我基本上了解了BSW是做什么的,并且对其中的一部分模块有一定了解了,但是要画出每个功能的构成还有点难度。那么这种情况我建议你再回头看看,一定要认真掌握I/O、Memory和Communication章节的内容再进入之后的学习。
3. 如果还不太了解BSW是做什么的。建议再将本章从头看过,切忌走马观花的看,一定要尽量使自己理解每个功能和其对应模块是做啥的

一、关于功能


功能和模块并非是一对一的,很多同学会一开始误解的认为一个功能就只拥有自己的那些模块,可实际上是,一个功能可能还会调用很多看似不属于自己的模块。比如CAN Driver,在Communication和Diagnostic中都有用到,因为它们都需要通信的功能。只不过Communication是ECU之间的通信,Diagnostic是ECU和诊断仪之间的通信。所以模块是模块,功能是功能,要区分开。就好像我们人体有功能,也有很多部件。我们的部件有手,脚,大脑等等。我们要实现两个功能,比如打篮球和敲代码:其实都会用到一些共同的部件(比如手,脑),但是也有一些不会都用到(比如脚)。所以模块就那么些,要实现一个功能可能会用到一些横向的模块,而并非绝对的竖向。所以一开始的这张图,大家就应该要理解虚线中其实只是该功能的主要模块,而非全部模块,要看每个功能有哪些模块,就要回头查看每个功能的章节了。

 

二、关于实际工程


相信下面这张图大家在之前已经看过了,但是这是为了大家方便理解。实际的工程还有些不太相同,这里我们来做具体的对比


由于工程结构是自己定义的,博主是用了一个很有经验的工程师的现成工程,应该比较有参考意义。


下面都是重点,请对照上图理解:
这里首先需要给大家说明一点,DaVinci配置工具配置出的AutoSAR架构主要分为两部分,一是源代码,二是配置代码。上图中由于无法一一映射,所以图中没有画映射箭头

  • 源代码: 主要是每个模块的具体功能实现(比如是用CAN还是CAN FD),里面定义了我们配置了或者没有配置的所有功能,源代码是固定不变的。那么这就要问了,源码固定不变,那我们还配置啥,岂不是都一模一样了?其实,在源码中,基本每个具体功能都有很多的 #ifdef #end 这样的语句,我们只需要 #define 这些定义,就可以使能该具体的功能,反之失能
  • 配置代码:配置代码中主要就是 #define ,我们在DaVinci中某个功能的使能框中打一个勾或者配置了某一项,配置代码中就 #define 一个定义。配置DaVinci最终只生成配置代码,这些代码里就基本是 #define ,控制着源代码中哪些函数可以使用,哪些不能使用。同时,DaVinci中配置了一些数据,比如Can波特率,在配置代码中也是类似 #define CanBaudRate XXXX 这样的定义,最终的实现还是在源代码中

1. 上图左边是我们之前的那个工程结构,右边是按照Vector的结构配置的实际项目中的工程结构。其实讲道理,左边的结构更加贴近AutoSAR本来的结构。但是由于代码生成的一些关系,最终我们还是得按Vector的来。图中的 ...... 是代表这里还有一些同类文件,由于太多了,图中省略掉。
2. 真实的工程主要分为两大块:AppL和BSW。AppL中存放的就是我们的配置代码和我们的手写代码;而BSW中就是我们的源代码。
3. BSW中又为了Bsw和Mcal两个部分(注意在这里区分BSW和Bsw),由于DaVinci中的Mcal配置是由非Vector的第三方工具EB配置生成的。因此工程中也是将Mcal和非Mcal源代码分开了。在Bsw中就主要是像BswM、COM、CANIf、NvM这些模块的配置,在Mcal中就主要是Adc Drv、Dio Drv和McuDrv等这些底层驱动模块(也有一部分是在DaVinci中配置的,比如Can Drv)。
4. AppL中分为GenData和Source两部分,GenData就是存放配置代码的地方(下面马上会讲到),而Source中就是存放我们手写代码的地方(或者Simulink生成代码,这里DaVinci会生成一个初始的框架,里面也有runnable函数名,但是函数里都是空的,需要手动添加)。只有这一部分是用户可以手动修改的,其他部分都不允许手动修改。
5. GenData是配置生成的,同样不允许手动修改;要改动的话,就要进配置工具中配置再重新生成。GenData中inc、mak和src就是Mcal的配置代码和其头文件(mak是存放makefile文件的,用于手动编译);Components主要存放Source里面的那些.c文件的头文件,由于不可以手动修改,因此放在了GenData中;剩下的那些.c和.h文件就是Bsw中除去Mcal的其他配置文件了。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 主体架构与接口

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Python dict keys方法:获取字典中键的序列【将keys转为list】

描述 dict.keys()方法是Python的字典方法,它将字典中的所有键组成一个可迭代序列并返回。 使用示例 >>> list({Chinasoft:China, Microsoft:USA}.keys()) [Chinasoft, Microsoft] >>> test_dict {Chinasoft:China, Microsoft:USA, Sony:Japan,…

JetBrains goland、pycharm、webstorm、phpstorm 对比两文件内容是否一致

对比文件 JetBrains goland、pycharm、webstorm、phpstorm 对比两文件内容是否一致 第一种 打开文件,按住键盘上的CTRL键,然后鼠标右键,点击菜单中的”Compare with Clipboard”,左侧就可以粘贴文件内容对比 第二种 在编辑器窗口中…

MyBatis使用PageHelper插件实现分页查询

1.引入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version> </dependency>2.在mybatis-config.xml⽂件中配置插件 <plugins><plugin interce…

搭建Home Assistant智能家居系统 - 随时随地控制你的家庭设备「内网穿透」

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

用于保护虚拟机数据安全的VMware备份方案!

​什么是有效的VMware备份方案&#xff1f; ​由于操作风险、自然灾害、恶意软件攻击、停电等意外状况的影响&#xff0c;备份VMware虚拟机是很重要的&#xff0c;它可以有效防止出现数据丢失和业务中断的情况。 一般来说&#xff0c;有效的VMware备份方案通常应该具…

pikache靶场通关——SSRF攻击

文章目录 前言环境第一关、SSRF&#xff08;curl&#xff09;Step.1、http协议链接本地文件Step.2、file协议读取C盘下的配置文件Step.3、dict协议扫描内网其他主机的端口开放情况Step.4、使用burp扫描内网其他主机的端口开放情况Step.5、后端源码分析 第二关、SSRF(file_get_c…

09-C++学习笔记-文件操作

&#x1f4da; 输入输出流的概念 在C中&#xff0c;输入输出流是用于在程序和外部设备&#xff08;如键盘、显示器、文件等&#xff09;之间进行数据传输的机制。输入流用于从外部设备读取数据到程序中&#xff0c;输出流用于将程序中的数据输出到外部设备。 C中的输入输出流…

实现自定义exporter

1、实现自定义exporter 1.1 四种常用Metrics 1.1.1 Counter 连续增加不会减少的计数器&#xff0c;可以用于记录只增不减的类型&#xff0c;例如&#xff1a;网站访问人数&#xff0c;系统运行时间等。 对于 Counter 类型的指标&#xff0c;只包含一个increment()的方法&…

Eclipse中的实用工具之JUnit

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于JUnit的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 是什么 为什么要用 怎么用 是什么 JUnit…

奇舞周刊第497期:解锁 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 内容

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 解锁 PDF 文件&#xff1a;使用 JavaScript 和 Canvas 渲染 PDF 内容 最近研究了 Web 的 FileSystemAccess Api&#xff0c;它弥补了 Web 长期以来缺少的能力&#xff1a;操作用户…

《PyTorch深度学习实践》第九讲 多分类问题

b站刘二大人《PyTorch深度学习实践》课程第九讲多分类问题笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p9&vd_sourceb17f113d28933824d753a0915d5e3a90 二分类问题中计算出 P ( y 1 ) P(y1) P(y1)即可直接得到 P ( y 0 ) P(y0) P(y0)&#xff0…

LeetCode 打卡day46-- 单词拆分和多重背包问题

一个人的朝圣 — LeetCode打卡第46天 知识总结 Leetcode 139. 单词拆分题目说明代码说明 知识总结 今天写了一道题目, 但是还挺难的, 而且是面试高频题目 还过了一遍多重背包问题. 多重背包与01背包的区别在于多重背包限制了物品的个数, 某些物品的个数可能不为1, 可以使用两…

Opencascade源码学习之模型算法_建模算法介绍

Opencascade源码学习之模型算法_建模算法介绍 介绍几何工具相交两曲线相交曲线曲面相交两曲面相交 插值Geom2dAPI_InterpolateGeomAPI_Interpolate 约束的直线和圆约束类型可用的线和圆的类型外部/内部直线的方向两个圆相切给定半径的圆与两个圆相切算法的类型 约束的曲线和曲面…

初识React/JSX

JSX ​​​​​​​推荐使用小括号包裹jsx

【Linux】硬链接 和 软链接

为了方便用户访问文件&#xff0c;Linux提供了一种称为连接&#xff08;link&#xff09;的机制&#xff0c;可以将一个文件或目录与另一个文件或目录建立关联&#xff0c;从而实现多个路径指向同一个文件或目录的效果。 一、概述二、硬链接和软链接详解2.1 硬链接2.11 硬链接的…

ASIC 数字设计:概述和开发流程

概述 集成电路是由硅晶圆&#xff08;wafer&#xff09;切割出来的芯片&#xff08;die&#xff09;组成的。每个晶圆可以切割出数百个芯片。 ASIC是指针对特定应用而设计的集成电路&#xff08;Application Specific Integrated Circuit&#xff09;&#xff0c;与通用的存储器…

ctfhub靶场练习——SSRF攻击

文章目录 前言关卡、内网访问关卡、伪协议读取文件关卡、端口扫描关卡、POST1、使用http协议查看本地的flag.php文件2、使用burp抓包&#xff0c;并发送到Repeater模块进行操作3、构造一个简单的POST请求&#xff1a;4、对构造的post请求进行url编码第一次编码&#xff1a;对第…

【裸机开发】GPT 定时器(一) —— GPT的功能、寄存器解析

后续需要使用 GPT 计数器实现中断以及延时&#xff0c;这里我们需要先了解一下GPT的功能以及相关寄存器。 目录 一、GPT 定时器的功能 1、计数器 2、输入捕获 3、输出比较&#xff08;GPT的两种工作模式&#xff09; 二、寄存器解析 1、GPTx_CR 2、GPTx_PR 3、GPTx_SR …

Jetson Nano烧写系统镜像

Jetson Nano是一款形状和接口类似于树莓派的嵌入式主板&#xff0c;搭载了四核Cortex-A57处理器&#xff0c;GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡&#xff0c;内存为4GB的LPDDR4&#xff0c;60Hz视频解码。 1.烧录前准备 电源线&#xff08;必备&#xf…