值得收藏的Autosar知识点和面试经典问题(一)

        年关将至,很多同学都开始摩拳擦掌,准备来年换个地方了。很多同学做过很多项目,但是不善于表达。因此将推出几篇面试中常见的autosar问题及参考回答,大家有其他遇见的问题也欢迎私信我,到时候我整理后一并发出来。希望大家共同进步,赢得高薪。

1 简述一下CAN/ETH协议栈涉及到的BSW模块及数据流向。

CAN:CAN<->CanIf<->PduR<->Com

ETH:ETH<->EthIf<->TcpIP<->SoAd<->PduR<->Com/LdCom

2 以太网各个分层的作用及TCP/UDP传输比较。

Autosar以太网框架见<<

        TCP/IP由ARP、IPv4、IPv6、ICMPv4、ICMPv6、NDP、UDP、TCP、DHCPv6和DHCPv4组成。IP(网络协议层)主要负责将数据分发到不同的目的地址,它隐藏了网络接口层的物理信息。ARP(地址解析协议,处于IPv4协议中)的主要功能是根据IP地址获取物理地址(如MAC地址)。

        SoAd主要的作用是为使用PDU的Autosar的通信模块(如PDUR)和TCP/IP提供一个接口。它为Pdu ID和socket连接做一个映射。 

TCP/UDP见<<以太网通信之TCP和UDP>>。前者是由传输协议层来控制发送,而后者时用户来来控制的。TCP是一种面向连接的协议,通过三次握手建立可靠的连接,通过4次挥手断开连接。发送端将数据分割成多个TCP段,并通过IP进行传输。接收端接收到TCP段后进行重组,并通过确认机制确保数据的可靠性。TCP还使用拥塞控制和流量控制机制来保证网络的稳定性。而UDP是一种无连接的协议,数据以数据报的形式独立发送。发送端将数据打包成UDP数据报并通过IP进行传输,接收端接收到数据报后直接提取数据。UDP不提供可靠性保证和拥塞控制机制,因此传输速度较快。TCP提供可靠性和顺序性,适合数据完整性要求高、顺序处理的应用;而UDP提供快速传输和较低的开销,适用于实时性要求高、对数据可靠性要求较低的应用。根据具体需求和应用场景的不同,选择适合的协议可以提高网络性能和用户体验。

3 UDS升级流程。

UDS升级流程见<<单片机Bootloader设计及基于UDS的刷写流程>>。大致分成三部分:预编程(ECU 重编程前的 CAN 网络准备)、主编程(ECU 下载应用程序或应用数据)和后编程(重新同步 CAN 网络,使网络通讯恢复)。预编程主要服务为切换到诊断会话、关闭DTC记录和禁止非诊断报文的发送。主编程的主要服务为切换到编程会话、安全会话、例程控制、应用程序或者标定程序的下载、例程控制(检查数据一致性)和复位。后编程主要服务为切换到扩展会话、使能非诊断通讯、打开DTC记录、安全访问后通过例程控制写入烧录记录(可选)。

4 Autosar OS的任务切换机制。

关于Autosar OS我们也写了很多文章,如<<多核单片机中Autosar OS 任务调度实现原理和配置>>。一般是主核有一个GPT(通用定时器模块)作为OS的滴答时钟,当中断触发时,会判断当前正在执行的任务的优先级与已就绪的任务优先级,这与其他开源OS类似,但是Autosar OS由于使用的是配置生成,也就是说在代码运行前就已经确定好所有任务和优先级,因此它不同于其他OS需要使用繁琐的机制来判断当前就绪的最高任务优先级,而可以使用一系列数组的形式将每个时刻要执行的任务排好,其实也就是空间换时间。对于多核单片机来说,当判断当前任务属于其他核时,则触发其他核的软中断,其他核(slave核)在软中断中执行保存上文核切换下文等操作。

5 怎么理解Autosar OS的基础任务与扩展任务。

关于基础任务与扩展任务,我们已在<<Autosar OS及其他OS的任务间通信机制>>一文中详细叙述。

图片

        基础任务基本过程为:Suspend-> Ready-> Running-> Suspend (循环)。扩展任务相对于基础任务多了一个等待态,基本过程为:Suspend-> Ready-> Running-> waiting-> Ready (循环)。extend task相对basic task,在waiting的时候还消耗堆栈资源,如果所有的task共用一块堆栈是会一定程度上影响性能的(栈分析见<<从开源OS到Autosar OS的栈管理机制>>).

6 Autosar BswM模块的作用

BswM模块已在<<一文搞懂Autosar BswM模块的原理和配置>>一文中详细分析。BSWM模块通俗来说就是BSW模块间的状态管理模块,负责读取各个BSW模块和SWC模块的状态,然后对这些状态进行判断,再根据判断的结果决定接下来执行什么动作,因此主要需要配置三个方面的内容读取信息、判断、根据判断结果执行动作。

7 Dcm模块的作用。

Dcm模块的介绍详见<<UDS(下)之DCM模块配置>>.  DCM模块为诊断服务提供一系列通用的API接口,它确保了诊断的数据流、管理会话和安全等诊断状态。

图片

        由DSL(Diagnostic Session Layer)、DSD(Diagnostic Service Dispatcher)和DSP(Diagnostic Service Processing)三个子模块组成。DSL负责确保诊断请求和回复的数据流向、监控和确保协议定时以及管理诊断状态等;DSD模块负责处理接收和发送的诊断数据并分发给相应的处理模块。DSP负责诊断服务的具体处理。

8 UDS中数据快照(DTCSnapshot)与扩展数据(DTCExtendedData)的区别。

        快照数据(有时也会叫冻结帧freeze frames)是存储在服务端内存中,并与故障码相关的具体数据记录,典型场景就是一旦检测到系统故障便存储数据。系统故障发生瞬间,一系列的数据值便会被冻结(快照)下来,如故障发生时的时间、电压、行驶里程和车速等。扩展数据的典型用法就是用来存储与故障码相关的动态数据,如:故障码发生次数,统计在驾驶循环中故障码状态位Bit1(“TestFailed”)被上报的次数;故障码老化次数,自故障码最近一次失效以来统计驾驶循环的次数,不包括未报出"testPassed" 或者"testFailed"的驾驶循环;最近发生时间;测试失效次数,统计"testFailed"汇报次数;未完成次数、故障测试最近一个完成后驾驶循环的次数。

9 UDS中DTC的各个状态位的含义及关系。

图片

Bit0 testFailed

        表示最近的测试结果,置1表示最近一次测试失败(故障处于Failed状态)了。置位后,可以通过清除故障信息服务(0x14)复位(清0).当测试结果为Passed时,也会清0.

Bit1 testFailedThisOperationCycle

        表示在当前循环测试发生了失败(故障确认发生,Failed)。置位后,可以通过清除故障信息服务(0x14)复位(清0).当本次循环结束时,也会清0.

Bit2 pendingDTC

        当测试结果为Failed时,置位。这个时候状态都已经存储在NVM中了,当至少1次测试结果为Passed或者接收到清除故障信息请求后复位(清0).

Bit3 confirmedDTC

        故障持续发生至少1次(测试持续出现至少1次Failed)时置位。这个位不能表明在当前循环中发生了故障,而testFailedThisOperationCycle可以表示在当前循环中出现了这个故障。可以通过清除故障信息服务(0x14)复位(清0)。当达到老化阈值(连续多次测试Passed)也会清0.当然,这个时候DTC是要存储在NVM的,假如NVM空间不足,此时又有更高优先级的DTC要存储,那么这个存储的信息也会被复位(清0).

Bit4 testNotCompletedSinceLastClear

        自从上次清除故障信息后,测试是否已经完成。0表示测试已经完成(结果可能是Passed或者Failed),1表示测试未完成(可能是未满足条件还没开始,也可能是测试还在进行中)。

Bit5 testFailedSinceLastClear

        自从上次清除故障信息后,测试是否出现了Failed的情况。和TestFailed一样,一般置位后需要通过清除故障信息服务复位。

Bit6 testNotCompletedThisOperationCycle

        当前循环测试是否未完成。0表示测试已经完成(果可能是Passed或者Failed),1表示未完成。当测试完成时,接收到清除故障信息的服务,该位会置1.

Bit7 warningIndicatorRequested

        某些DTC置位后,会触发如仪表盘上的指示灯量起。当这类DTC出现failed情况该Bit将置位为TRUE,而对于不关联DTC该Bit将不会使用,保持为FALSE状态。几个位之间的关系举例如下图所示。

图片

        图中所示检测Passed还是Failed就是基于debounce来做的,当在时刻1时,表明测试处于完成状态(complete)且结果为Passed,此时testNotComplete SincLastClear和testNotComplete ThisOperationCycle清0.当错误检测的计数值(Fault Detection Counter)在0~127或者-128~0之间时,测试未完成且结果分别为PreFailed或者Prepassed。当在时刻2时,一次test sample返回的结果出现了failed,此时错误计数值变成了大于0的数值。随着不断的测试样本出现错误,在时刻3时,达到了128,此时测试结果为Failed,那么testFaied、testFailed ThisOperationCycle、pendingDTC、confirmedDTC(假如1个循环的测试Failed就确认DTC)和testFailed SinceLastClear都会置1.假如在这个循环内测试样本的结果一直都没有错误(或者不出错的次数大于出错的次数),当错误计数值为-128(时刻7)时,testFailed清0。此后,这个操作循环结束,新的操作循环开始后,testFailed ThisOperationCycle和testNotComplete ThisOperationCycle都会清0.在时刻9,错误计数值为-128,表明这个循环一个test完成了且结果为Passed,那么testNotComplete ThisOperationCycle又会再次置1。

10 Autosar OS任务优先级数值与优先级的关系

        对于Autosar OS和FreeRTOS而言都是优先级数值越大,优先级越高,而μcos则是优先级数值越小,优先级越高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值