在调用发送函数Can_17_McmCan_Write中,首次发送时,任意对应TxBuffer均会满足条件成立,从而能够分配得到Tx Buffer,得到Buffer之后,便会将对应Buffer的CanTxMask的Bit置位为0,进而锁住该Buffer,直到被释放之后才能够使用,如下图为锁住对应Tx Buffer代码: Q2:什么情况下会释放这个Tx Buffer所在的Bit位呢? Ans:通过分析...
将数据传给PduR模块;PduR模块路由到CAN Interface模块,调用CanIf_Transmit函数,这样数据从PduR模块传给了下层的CAN Interface模块;CAN Interface模块再调用Can Driver模块的Can_Write函数,将数据写入相应的寄存器;与CAN接收功能一样,Can
CAN Interface模块再调用Can Driver模块的Can_Write函数,将数据写入相应的寄存器; 与CAN接收功能一样,Can_Write函数将访问仲裁,数据长度和数据寄存器,将数据写入。 图7描述了数据发送后的确认过程,即: BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Write函数; CAN Driver模块的Can_MainFunction_Write函数将访问...
回到上面的两个问题,从前面文章可知,CAN发送时,对于CAN模块有两个操作:一是先访问硬件,将数据写入寄存器;二是发送成功后,向上层CAN Interface模块确认。 图11 CAN模块的写数据 图12 CAN模块的发送确认 针对写数据操作,CAN Interface模块调用Can_Write函数,其定义如下: 图13 CAN_Write的定义,引自[1] 这里首先要...
Can_Write: 发送CAN帧。这个接口可以用来向CAN总线发送CAN帧,它需要提供一个CAN帧的数据结构,包括帧ID、数据长度和数据等信息。 Can_Read: 接收CAN帧。这个接口用于从CAN总线接收CAN帧,并将数据存储在指定的缓冲区中。 Can_MainFunction: CAN Driver主功能。这个接口用于处理CAN Driver的主要任务,如发送和接收CAN帧...
Can_ReturnType Can_17_McmCan_Write(const Can_HwHandleType Hth, const Can_PduType *const PduInfo) 1. 2. 复制 这里面通过两个全局变量来获取CAN硬件的相关配置,和当前这帧报文的相关配置。 /* Variable to hold the pointers to variables holding core specific CAN ...
CanIf的可能应用: 1.中断模式 CanDrv处理由CAN控制器触发的中断。 CanIf(基于事件)在事件发生时得到通知。在这种情况下,可以在CanDrv中的相应ISR中调用相关的CanIfservices。 2.轮询模式 CanDrv由SchM触发并执行后续过程(PollingMode)。在这种情况下,Can_MainFunction_ <Write / Read / BusOff / Wakeup / ...
当使用多个CanDrv时,识别CanDrv 确定访问CAN硬件传输对象的HTH 调用CanDrv的Can_Write() 如果传输请求服务CanIf_Transmit()返回E_OK,则传输成功完成。 如果一个L-PDU被请求通过一个PDU通道模式来传输,这个模式等于CANIF_OFFLINE,那么CanIf应该向DET的Det_ReportRuntimeError()服务报告运行时的错误代码CANIF_E_STOP...
在数据发送的过程中,PduR模块通过调用CanIf_Transmit函数,驱动CAN模块执行Can_Write操作。一旦发送成功,CanIf会通过轮询或中断机制触发CanIf_TxConfirmation,确保信息的准确传递。接收端,Can模块通过CanIf_RxIndication引发PduR_RxIndication,接收并处理到来的数据。CanIf模块的核心通知功能,通过Mailbox和...
CAN Interface模块再调用Can Driver模块的Can_Write函数,将数据写入相应的寄存器; 与CAN接收功能一样,Can_Write函数将访问仲裁,数据长度和数据寄存器,将数据写入。 图7描述了数据发送后的确认过程,即: BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Write函数; ...