梅尔文
汽车软件技术专家
展开
-
TC397的Trap机制
这个osTrap_1_Core0函数可能指向用户编写的函数,也可能是默认的Os_Hal_UserTrapEntry处理函数,下面简要分析Camera项目中发生trap故障时bug现场保存的流程,这里通过callout函数将bug信息保存在DSPR,可实现没有调试器或者bug偶发时对问题的追踪。到目前为止,我们已经可以定位到trap类型bug的引发原因,从而针对性的修改代码。寄存器保存了异常向量表的基地址。由下图可以看到,针对8类trap,程序都有对应的trap处理函数。向量进行访问,并按硬件定义的。原创 2024-06-24 19:53:33 · 15 阅读 · 0 评论 -
OS中断机制-外部中断触发
根据DataSheet的文档描述,中断被触发,一定是因为寄存器的改变,从而触发对应的中断服务函数(注意中断触发后,要如何执行要根据自己的需求去实现Callback)也就说在初始化的时候,已经确定哪个GPIO作为中断IO,而在这里只是根据IO对应的中断线去使能中断功能。MCU正常运行时,外部中断源发生中断事件,中断源向MCU发送跳转指令,跳转到对应的中断服务函数。AUTOSAR的中断触发,基于TC397的I2C。初始化GPIO,并确认中断的触发方式。中断被触发,执行中断服务函数。EXTI外部中断触发过程。原创 2024-06-24 19:31:37 · 26 阅读 · 0 评论 -
CAN网络管理(TJA1145如何实现MCU的休眠唤醒)
当一个节点准备进入睡眠模式时,它会通过网络发送一个特殊的同步消息,通知其他节点它即将进入睡眠状态。其他节点接收到该消息后,会做出相应的响应,以确保整个系统在同一时间进入睡眠状态。同样地,当一个节点准备唤醒时,它会发送一个唤醒消息来通知其他节点。其他节点接收到唤醒消息后,会做出相应的响应,以确保整个系统在同一时间唤醒。CanNM报文周期性的向MCU发送,如果一旦一段时间没有收到,MCU就通过SPI向TJA115的寄存器写数据,要进入sleep模式,之后TJA1145在向PMIC拉低。原创 2024-05-18 19:28:34 · 399 阅读 · 0 评论 -
CAN网络管理(网络管理报文的定义)
CanNM报文通过广播发送到总线上,网络中的所有节点都可以接收到报文,接收到CanNM报文表示发送这个报文的节点倾向保持网络工作模式。如果有节点准备好进入总线睡眠模式,它就停止发送CanNM消息,但是只要它还能够接收到从其他节点发来的CanNM消息,它就延迟到总线睡眠模式的变迁。其余字节作为User Data给到客户自行定义。节点ID是0X2,ADCU的节点。原创 2024-05-18 17:32:53 · 159 阅读 · 0 评论 -
CAN网络管理(网络节点)
通过配置寄存器,确定接收过滤器用于定义节点接收哪些报文,过滤器的定义是通过设置报文标识符(ID)参数来实现的还有屏蔽寄存器(Mask Registers),可以与AUTOSAR中的Basic Can一起用。网络节点是指连接到CAN总线上的设备或模块,每个网络节点都具有唯一的标识符,称为节点ID,用于在CAN总线上进行通信和识别。以ADCU为例,域控作为主节点,一般外部的像雷达,camera的数据都是向域控发送的,0x26节点向0x40节点发送报文。如何通过广播发送CAN报文到对应的节点。原创 2024-04-16 20:01:24 · 371 阅读 · 0 评论 -
CAN的底层驱动
它负责将CAN控制器产生的CAN消息转换为适合在CAN总线上传输的电信号,并将从CAN总线接收到的电信号转换为CAN控制器可以理解的数据。RX Handler 负责将 CAN 内核的数据传输到外部消息 RAM 中, RX Handler 支持两个接收FIFO,每个 FIFO 可以配置 64 个专用的 buffer。Can报文传输到Can_Controller,也就是MCU子系统,如下图所示,通过子系统的一系列机制,过滤器、接收发送 FIFO,最终传到Core。最后,数据在通过core传到MCU内核。原创 2024-04-17 21:00:22 · 118 阅读 · 0 评论 -
AUTOSAR-SOMEIP配置总结
导入arxml之后someip信号一般以“pduSomeIp”开头或者“SomeIp”开头。以某个pdu为例,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。在导入arxml之后someip信号中有三个特殊的信号,形如“SdInstance”开头的信号,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。“EcuC”模块主要关注“EcucPduCollection”中的“Pdus”下面的配置。原创 2022-09-28 10:54:44 · 3379 阅读 · 3 评论 -
基于linux进一步理解核间通讯
AMP 结构是指每个内核运行自己的 OS 或同一 OS 的独立实例,或者说不运行 OS,如运行裸机,每个内核有自己独立的内存空间,也可以和其它内核共享部分内存空间,每个核心相对独立地运行不同的任务,但是有一个核心为主要核心,它负责控制其它核心以及整个系统的运行,而其它核心负责“配合”主核心来完成特定的任务。RemoteProc(远程处理):其实就是可以理解为在主处理器A7上,通过回调功能触发M4的驱动,之后M4就启动了IPC功能;RPMsg(远程处理器消息传递)基于STM32MP157。原创 2024-04-12 10:14:50 · 147 阅读 · 0 评论 -
AUTOSAR-内部与外部Watchdog应用逻辑
当内狗使能以后,如果程序运行异常,没有有效喂狗,内狗会触发SMU(Safety Management Unit)的Alarm,进行异常处理,eg:通知复位控制单元(RCU:Reset Control Unit)进行复位。WWDG 时钟由 APB 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。有两个看门狗,独立看门狗和窗口看门狗,独立看门狗又称宠物狗,此独立看门狗外设可检测并解决由软件错误导致的故障,并在计数器达到给定的超时值时触发系统复位。外部PMIC的watchdog。原创 2024-04-08 15:26:13 · 172 阅读 · 0 评论 -
内部flash模拟eeprom逻辑
模拟成eeprom的两个eep_page写数据逻辑就是,先在eep_page0写数据,eep_page0写满后,将eep_page0的有效数据copy到eep_page1,之后擦eep_page0,此时需要注意的是将eep_page0的有效数据copy到eep_page1,因为正常我们向flash里写的数据有很多无效数据,比如同一个变量写了50次,那我们只需要最后一次的值,之前的49次都是无效数据。(实际上page每次切页最终保留的就是所有存在的变量)原创 2024-01-15 15:45:24 · 257 阅读 · 0 评论 -
AUTOSAR OS任务调度的底层逻辑
先参考OSEK与FreeRTOS在任务调度上最大的区别在于,FreeRTOS是基于全抢占任务调度和时间片轮转调度机制,具有并发和并行的能力。而OSEK主要以调度表机制和Alarm机制触发任务,不具备并行的能力。最大的相同点是都是根据优先级高低的全抢占调度机制(OSEK可选非全抢占)。原创 2023-11-30 21:24:09 · 1058 阅读 · 0 评论 -
PDUR & IPDUM
触发 PduR_LoTpRxIndication 触发 PduR_GetUpTpTpRxIndicationFctPtrOfMmRom 查询存储PDU路由表的信息,确认要路由到的目标模块,之后触发 Dcm_TpRxIndication 调用。(PduR_LoTpStartOfReception)是与PduR的接口)触发 PduR_GetUpTpStartOfReceptionFctPtrOfMmRom 查询存储PDU路由表的信息,确认要路由到的目标模块,之后触发。原创 2023-11-05 16:57:09 · 560 阅读 · 0 评论 -
CAN报文的信号和信号组传递的意义
0x105指的是一帧CAN报文,信号组指的是一帧CAN报文里的所有数据,信号指的是一帧CAN报文里的每一个信号,PDU代表了一帧CAN报文,它由报文ID(Identifier)、控制位(Control Bits)、数据字段(Data Field)和校验位(Checksum)等组成。CAN的PDU可以通过信号或信号组的形式传递到COM层,但为什么要这样区别呢,反正用信号组也可以实现读取单个信号,那传递单个信号有什么用。如果多个信号组共享相同的信号,那么将这些信号拆分为单独的信号后,可以减少重复定义和传输。原创 2023-11-04 19:42:36 · 523 阅读 · 0 评论 -
ECU上下电流程-BSWM与ECUM
原创 2023-10-27 20:11:51 · 393 阅读 · 0 评论 -
OS的事件机制-Event
Event在OSEK OS中,其实就是一个flag的作用,如何某个TASK执行了,就调用把flag就置起来,和这个task关联的另一个TASK也执行了,就可以把flag清掉,如果第一个TASK没有执行完,第二个TASK就进入等待状态,直到第一个TASK执行完。OSEK 中的事件是一种可以被多个任务等待的同步机制,任务可以在等待事件时被阻塞,并且在事件发生时被唤醒。它可以用于查询事件标志的状态,以便任务可以根据需要采取相应的行动。原创 2023-06-13 21:03:16 · 1187 阅读 · 0 评论 -
ISO14229 理解(一)
ISO-14229用于汽车行业诊断通信的需求规范,它只规定了与诊断相关的服务需求,并没有涉及通信机制,因此要实现一个完整的诊断通信还需要定义网络层协议(比如ISO-15765),还有底层硬件实现方式(比如CAN控制器)。由于不涉及网络通信机制,可以架设在各种网络之上,因此ISO-14229也称为UDS(Unified Diagnostic Services)统一诊断服务。在ISO14229里,共有26个UDS服务:UDS定义的诊断服务从逻辑来说分为以下几类:用途其实诊断通信的机制很简单,可以类比cl原创 2022-06-21 10:38:17 · 8757 阅读 · 0 评论 -
AUTOSAR-OS的调度机制-调度表(没理解透,继续更新)
注意:Task A在第一个周期中执行时间为3个计数周期,在第二个周期中执行时间为4个计数周期,在第三个周期中执行时间为2个计数周期,在第四个周期中执行时间为3个计数周期,在第五个周期中执行时间为5个计数周期。Task A的间隔时间是指Task A完成一次执行后需要等待的时间,在实际的调度系统中,任务的间隔时间可能会受到多种因素的影响,例如任务的优先级、资源的竞争等。驱动计数器是用于驱动整个调度表运行的计数器,它的计数周期通常是固定的,并且要大于调度表的时间,以确保调度表中的所有任务都能够被执行到。原创 2023-06-07 16:21:53 · 3937 阅读 · 2 评论 -
进程、线程、Core、OS Application、task、event、runnable、SWC、port的区别与联系
其实也好理解,如果一个C文件孤零零的放在那里,与别的C文件没有任何数据交互,那么作为一套代码中的一个C文件,根本没法发挥作用,所以必然在SWC上需要配置上或者输入(R-Port)的或者输出(P-Port)的Port。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。如果处理器支持,可以运行在特权模式,OS默认Trusted类型的OS Application不会引发内存相关故障,如果发生了内存故障,系统稳定性将不再保证,可能需要关闭OS。原创 2023-02-28 20:25:31 · 2259 阅读 · 5 评论 -
AUTOSAR-自旋锁(spinlock)与互斥锁
AUTOSAR多核OS为实现核间资源互斥,保证数据一致性,设计了自旋锁机制,该机制适用于核间资源互斥。对于多核概念,需要一种新的机制来支持不同内核上任务的互斥。这种新机制不应在同一内核上的 TASK 之间使用,因为它没有意义。在这种情况下,AUTOSAR 操作系统将返回错误。自旋锁的特点就是当一个线程获取了锁之后,其他试图获取这个锁的线程一直在循环等待获取这个锁,直至锁重新可用。由于线程实在一直循环的获取这个锁,所以会造成CPU处理时间的浪费,因此最好将自旋锁用于能很快处理完的临界区。原创 2023-02-20 18:52:43 · 2864 阅读 · 3 评论 -
AUTOSAT-Can-FilterMask 为什么用FilterMask,什么时候用,为什么用
为什么用FilterMask,什么时候用,为什么用原创 2023-02-01 11:36:42 · 1332 阅读 · 0 评论 -
StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例
1.1 判断时钟域1.2 Master 与 Slave 报文发送的相关变量:SYNC 和 FUP 报文发送时相关变量、SYNC 和 FUP 报文接收时相关变量、Pdelay_Req 报文发送时变量、Pdelay_Resp 和 Pdelay_Resp_FUP 发送时的相关变量、Pdelay_Resp 和 Pdelay_Resp_FUP 接收时的相关变量1.3 获取以太网的 MAC 地址。原创 2022-11-13 20:14:33 · 1353 阅读 · 0 评论 -
StbM 和 Time Synchronization Over CAN and Ethernet(一)撸完代码并且再一次理解后,再更新
时间同步技术就是为了解决精确获取传感器采样时间的汽车上的各个ECU基本都是实时性非常强的控制器,在关联ECU之间或ECU内部各个软件模块之间通常需要在大致同步的时间节拍上运行,特别是在某些高速场景,些微时间的偏差可能引发的后果是灾难性的如果感知模块和控制模块都在一个控制器内还好,延时不会很大,若是分布在不同的控制器中,感知模块发送的障碍物信息携带的时间戳与实际检测到的时间偏差太大,那么等控制模块作出响应时,可能汽车已经撞到障碍物上了。原创 2022-11-06 19:17:49 · 2375 阅读 · 3 评论 -
AUTOSAR I-PDU的理解以及I-PDU的Callout
我理解的 I-PDU 应该就是一个 Message,Message 是由多个信号组成的。比如下图中多路复用 Multiplexor = 0 时,无数个信号组成了一个 Message。Com模块获取应用层的信号(Signal),经一定处理封装为I-PDU(Interaction Layer Protocol Data Unit)发送到PduR模块。信号I-DPU可以包含一个或多个信号,可以理解为一个I-PDU为一帧CAN消息,信号就是dbc中定义的。...原创 2022-08-31 14:54:54 · 7111 阅读 · 4 评论 -
DTC中Debounce策略的疑问回答
在计数器中,达到FAILED的是正数,达到PASSED是负数,如下图所示,范围-128~127是他的错误计数器,比如我现在要求,计数达到10次就FAILED,而在这之中的0~9次都处于PREFAILED状态.同样的PASSED的状态也可以类似这个定义,计数达到10次就PASSED,而在这之中的0~9次都处于PREPASSED状态.回答根据当前的状态和在此之前的状态,判断是使能JumpDown功能,还是使能JumpUp功能。-128~127指代的是计时器中的错误计数器counter,.........原创 2022-07-31 23:01:25 · 1023 阅读 · 0 评论 -
DTC故障中Debounce策略
现在,我创建了一个Task,这个Task每10ms就会执行一次,我可以将DTC的判断条件放在这个Task里,如果判断(Failed)条件成立三次,就会setFailed状态。在SWC中,可以通过手写代码来实现上面两个的逻辑,比如说DTC判断的需求是每10ms判断一次,如果三次判断都是Failed,则DTCsetFailed,否则是PASSED。由于诊断事件report故障及状态是独立于DEM模块,所以为了保存debounce之后的故障状态,可以给每个故障再给配一个变量记录debounce的状态。...原创 2022-07-31 16:49:07 · 4087 阅读 · 2 评论 -
AUTOSAR中CAN信号是如何触发COM回调的
在CAN驱动中,回调函数通常是通过中断或轮询的方式触发的。当CAN控制器接收或发送CAN数据帧时,CAN控制器会产生相应的中断或状态变化,在中断服务例程(ISR)中或轮询循环中,CAN驱动会调用相应的回调函数来处理这些CAN事件。原创 2023-07-04 19:44:58 · 1580 阅读 · 3 评论 -
RTE(Runtime Environment)
也可以是运算,原创 2023-10-27 13:51:09 · 1964 阅读 · 0 评论 -
AUTOSAR-Ports的类型
若运行实体采用显示模式的S/R通信方式,数据读写是即时的,这就是显式模式。当多个运行实体需要读取相同的数据时,若能在运行实体运行之前先把数据读到缓存中,在运行实体运行结束后再把数据写出去,则可以改善运行效率,这就是隐式模式。Ports是SWC和SWC做接口(Interface)通信使用,或者SWC通过RTE和BSW做接口(Interface)通信使用。需型端口为接收者(Receiver),供型端口为发送者(Sender)。通信可以是11(1对1的调用)或者n1(多对1的调用)...原创 2022-08-01 18:48:06 · 3018 阅读 · 0 评论 -
如何根据DBC计算CAN与CANFD的负载率
CAN总线负载1.1 负载概念CAN总线的负载率, 就是指总线上所有节点在单位时间内发送的所有数据占整个总线理论带宽的比值,也就是总线实际数据传输速率与理论上能达到的数据传输速率的比值。提示:比如在一个波特率为500Kbps的总线上,理论上每秒钟能够传输500000个BIT,而如实际上只传输了100000个BIT,那么就可以得到此刻的总线负载率为100000/500000=20%。CAN BUS的总线负载率是CAN总线架构协议设计时的一个重要的指标。一般建议负载率峰值不要高于80%,平均负载率不要超原创 2022-04-24 21:56:19 · 3667 阅读 · 3 评论 -
关于CAN信号的大小端及分析
大端小端是不同的字节顺序存储方式,统称为字节序;【X86系统是小端模式,C51是大端模式】例:大端模式:是指数据的高字节位 保存在 内存的低地址中,而数据的低字节位 保存在 内存的高地址中。这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。和我们”从左到右“阅读习惯一致。例:小端模式:是指数据的高字节位 保存在 内存的高地址中,而数据的低字节位 保存在 内存的低地址中。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的原创 2022-06-29 17:50:46 · 6153 阅读 · 0 评论 -
如何看一份DBC文件
什么是DBC文件DBC是Database Can的缩写,其代表的是CAN的数据库文件,在这个文件中把CAN通讯的信息定义的非常完整清楚,而CAN网络的通讯就是依据这个文件的描述进行的,所以DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。DBC文件一般我们在写应用代码时,会参考DBC文件的一些参数,编写他的代码。一、DBC文件内容当我们打开一份DBC文件时,主要看 Network nodes下里的网络节点,网络节点分为多个类,如下图,分为SDE、se原创 2022-05-30 14:17:22 · 7850 阅读 · 4 评论 -
我在做什么 - 汽车基础软件
汽车行业需要掌握的知识和技能 - 基础软件方向原创 2022-04-24 19:49:13 · 421 阅读 · 1 评论