干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

概述

TSMaster目前有两种读取报文的模式:回调函数模式和fifo模式。

回调是一种编程机制,它允许在某个特定事件发生或某个操作完成后,系统自动调用事先定义好的函数(称为回调函数)。回调类似于mcu中的中断,优点是响应及时,缺点是不能在里面运行长耗时动作。

fifo是一种数据结构或缓冲机制,它遵循先入先出的原则。在数据接收过程中,最早进入 fifo的数据会被最先处理或读取。fifo 有一个输入端口和一个输出端口。数据从输入端口依次进入 fifo缓冲区,然后按照进入的顺序在缓冲区中排队等待。当需要读取数据时,从输出端口按照先入先出的顺序将数据取出。这样可以确保数据的接收和处理顺序与它们到达的顺序一致,避免数据混乱或丢失。fifo的优点是用户可以在自己的任务或者线程中根据需要从驱动中读取数据,延时等可以自己控制。缺点是异步的方式,是在报文已经收发完成之后才会将数据取出进行处理。

由于fifo函数是TSMaster近期新增的函数,本文将重点介绍fifo模块。关于回调函数的使用方法可以参考帮助模块的《快速入门》手册。

fifo典型应用

在汽车发动机、变速器等动力总成系统中,多个传感器和执行器通过 CAN 总线进行通信。fifo用于接收来自各个传感器(如节气门位置传感器、曲轴位置传感器)的 CAN 报文。这些报文包含了发动机运行状态、转速、负荷等关键信息。fifo 按照报文到达的先后顺序存储,发动机控制单元(ECU)从 fifo 中依次读取报文,进行数据分析和处理,进而调整喷油时间、点火提前角等参数,确保发动机在不同工况下都能高效、稳定运行。

技术背景

TSMaster的小程序模块中提供了接收事件、发送事件以及预发送事件等回调事件,如图 1。相比于回调函数,fifo函数使用起来比较灵活方便,可以在任意一个模块使用,不再局限于接收、发送等回调事件。相关的fifo函数可以在【设计】-【C小程序】-【函数】中找到,如图 2。

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图1:小程序的回调模块

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图2:小程序的fifo函数模块

fifo函数读取报文功能实现

功能实现

读取CAN报文:

使用fifo读取缓存报文之前,需要先调用com.tsfifo_enable_receive_fifo()函数。本小节将提供一个简单示例,可参考以下步骤。

【步骤1】新建程序启动事件,将使能fifo的函数添加到该事件函数里。如图 3。

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图3:程序启动事件

【步骤2】新建按键事件,将读取fifo的函数添加到该事件函数里。如图 4。

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图4:按键事件

【步骤3】新建程序停止事件,将取消使能fifo的函数添加到该事件函数里。如图 5。

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图5:程序停止事件

【源码如下】

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法 示例C小程序源代码:

s32 msgcount = 0;

if (0 == com.tsfifo_read_canfd_buffer_frame_count(CH1, &msgcount))

{

log(“Success to read message number = %d in the buffer”, msgcount);

}

else

{

log(“Fail to read message number in the buffer”);

}

TCANFD buf[100];

int bufsize = 100; // bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if (0 == com.tsfifo_receive_canfd_msgs(buf, &bufsize, CH1, true))

{

log(“Success to read data from fifo, real read data number = %d”, bufsize);

for (int i = 0; i < bufsize; i++)

{

log(“ID=%x,Dir=%d,Chn=%d,DLC=%d”, buf[i].FIdentifier, buf[i].FProperties & 1, buf[i].FIdxChn, buf[i].FDLC);

}

}

else

{

log(“Fail to read data from fifo”);

}

读取LIN报文:

使用fifo读取缓存报文之前,需要先调用com.tsfifo_enable_receive_fifo()函数。可参考3.1.1读取CAN报文小节。

【源码如下】

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法 示例C小程序源代码:

s32 msgcount = 0;

if (0 == com.tsfifo_read_lin_buffer_frame_count(CH1, &msgcount))

{

log(“Success to read message number = %d in the buffer”, msgcount);

}

else

{

log(“Fail to read message number in the buffer”);

}

TLIN buf[100];

int bufsize = 100; // bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if (0 == com.tsfifo_receive_lin_msgs(buf, &bufsize, CH1, true))

{

log(“Success to read data from fifo, real read data number = %d”, bufsize);

for (int i = 0; i < bufsize; i++)

{

log(“ID=%x,Dir=%d,Chn=%d,DLC=%d”, buf[i].FIdentifier, buf[i].FProperties & 1, buf[i].FIdxChn, buf[i].FDLC);

}

}

else

{

log(“Fail to read data from fifo”);

}

读取flexray报文:

使用fifo读取缓存报文之前,需要先调用com.tsfifo_enable_receive_fifo()函数。可参考3.1.1读取CAN报文小节。

【源码如下】

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法 示例C小程序源代码:

s32 msgcount = 0;

if (0 == com.tsfifo_read_flexray_buffer_frame_count(CH1, &msgcount))

{

log(“Success to read message number = %d in the buffer”, msgcount);

}

else

{

log(“Fail to read message number in the buffer”);

}

TFlexRay buf[100];

int bufsize = 100; // bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if (0 == com.tsfifo_receive_flexray_msgs(buf, &bufsize, CH1, true))

{

log(“Success to read data from fifo, real read data number = %d”, bufsize);

for (int i = 0; i < bufsize; i++)

{

log(“SlotID=%d,Dir=%d,Chn=%d,Length=%d”, buf[i].FSlotId, buf[i].FDir & 1, buf[i].FIdxChn, buf[i].FActualPayloadLength);

}

}

else

{

log(“Fail to read data from fifo”);

}

实现效果:

启动小程序,发送报文,打印的消息可在【分析】-【系统消息】处查看,如图 6。

干货分享 | 解锁TSMaster fifo函数:报文读取的高效方法

图 6: 实现效果

TSMaster fifo函数说明

fifo函数说明

com.tsfifo_enable_receive_fifo

项目 描述
【函数名称】 void com.tsfifo_enable_receive_fifo()
【功能介绍】 使能fifo模块,调用fifo的函数之前需要先调用该函数
【输入参数】
【返回值】
【使用示例】 com.tsfifo_enable_receive_fifo();

com.tsfifo_disable_receive_fifo

项目 描述
【函数名称】 void com.tsfifo_disable_receive_fifo()
【功能介绍】 取消使能接收fifo模块
【输入参数】
【返回值】
【使用示例】 com.tsfifo_disable_receive_fifo();

com.tsfifo_enable_receive_error_frames

项目 描述
【函数名称】 void com.tsfifo_enable_receive_error_frames();
【功能介绍】 使能接收错误帧
【输入参数】
【返回值】
【使用示例】 com.tsfifo_enable_receive_error_frames();

com.tsfifo_disable_receive_error_frames

项目 描述
【函数名称】 void com.tsfifo_disable_receive_error_frames()
【功能介绍】 取消使能接收错误帧
【输入参数】
【返回值】
【使用示例】 com.tsfifo_disable_receive_error_frames();

com.tsfifo_add_can_canfd_pass_filter

项目 描述
【函数名称】 s32 com.tsfifo_add_can_canfd_pass_filter(s32 AIdxChn, s32 AIdentifier, bool AIsStd)
【功能介绍】 添加CAN/CANFD fifo过滤报文,只通过某帧,该函数可调用多次
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

AIdentifier:过滤的报文标识符

AIsStd:是否是标准帧,True是标准帧,False是扩展帧

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_add_can_canfd_pass_filter(CH1, 0x23, true)){

log(“Success to add filter to can/canfd fifo”);

}else{

log(“Fail to add filter to can/canfd fifo”);

}

com.tsfifo_delete_can_canfd_pass_filter

项目 描述
【函数名称】 s32 com.tsfifo_delete_can_canfd_pass_filter(s32 AIdxChn, s32 AIdentifier)
【功能介绍】 删除CAN/CANFD fifo过滤报文
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

AIdentifier:过滤的报文标识符

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_delete_can_canfd_pass_filter(CH1, 0x23)){

log(“Success to delete filter from can/canfd fifo”);

}else{

log(“Fail to delete filter from can/canfd fifo”);

}

com.tsfifo_add_lin_pass_filter

项目 描述
【函数名称】 s32 com.tsfifo_delete_can_canfd_pass_filter(s32 AIdxChn, s32 AIdentifier)
【功能介绍】 添加LIN fifo过滤报文
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

AIdentifier:过滤的报文标识符

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_add_lin_pass_filter(CH1, 0x23)){

log(“Success to add filter to lin fifo”);

}else{

log(“Fail to add filter to lin fifo”);

}

com.tsfifo_delete_lin_pass_filter

项目 描述
【函数名称】 s32 com.tsfifo_delete_lin_pass_filter(s32 AIdxChn, s32 AIdentifier)
【功能介绍】 添加LIN fifo过滤报文
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

AIdentifier:过滤的报文标识符

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_delete_lin_pass_filter(CH1, 0x23)){

log(“Success to add filter to lin fifo”);

}else{

log(“Fail to add filter to lin fifo”);

}

com.tsfifo_clear_can_receive_buffers

项目 描述
【函数名称】 s32 com.tsfifo_clear_can_receive_buffers(s32 AIdxChn)
【功能介绍】 清除CAN fifo缓冲区
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。
【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_clear_can_receive_buffers(CH1)){

log(“Success to clear the fifo of channel = %d”, CH1);

}else{

log(“Fail to clear the fifo of channel = %d”, CH1);

}

com.tsfifo_clear_canfd_receive_buffers

项目 描述
【函数名称】 s32 com.tsfifo_clear_canfd_receive_buffers(s32 AIdxChn)
【功能介绍】 清除CANFD fifo缓冲区
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。
【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_clear_canfd_receive_buffers(CH1)){

log(“Success to clear the fifo of channel = %d”, CH1);

}else{

log(“Fail to clear the fifo of channel = %d”, CH1);

}

com.tsfifo_clear_lin_receive_buffers

项目 描述
【函数名称】 s32 com.tsfifo_clear_lin_receive_buffers(s32 AIdxChn)
【功能介绍】 清除LIN fifo缓冲区
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。
【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_clear_lin_receive_buffers(CH1)){

log(“Success to clear the fifo of channel = %d”, CH1);

}else{

log(“Fail to clear the fifo of channel = %d”, CH1);

}

com.tsfifo_clear_flexray_receive_buffers

项目 描述
【函数名称】 s32 com.tsfifo_clear_flexray_receive_buffers(s32 AIdxChn)
【功能介绍】 清除Flexray fifo缓冲区
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。
【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 if(0 == com.tsfifo_clear_flexray_receive_buffers(CH1)){

log(“Success to clear the fifo of channel = %d”, CH1);

}else{

log(“Fail to clear the fifo of channel = %d”, CH1);

}

com.tsfifo_read_can_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_can_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CAN报文缓冲区中的报文数量(包括发送和接收方向)
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_can_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_can_rx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_can_rx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CAN报文缓冲区中的接收报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_can_rx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_can_tx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_can_tx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CAN报文缓冲区中的发送报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_can_tx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_canfd_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_canfd_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CANFD(包含CAN)报文缓冲区中的报文数量(包括发送和接收方向)
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_canfd_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_canfd_rx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_canfd_rx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CANFD(包含CAN)报文缓冲区中的接收报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_canfd_rx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_can_tx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_canfd_tx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取CANFD(包含CAN)报文缓冲区中的发送报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_canfd_tx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_lin_buffer_frame_count

项目 描述
【函数名称】 s32 tsfifo_read_lin_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取LIN报文缓冲区中的报文数量(包括发送和接收方向)
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道。

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_lin_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_lin_rx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_lin_rx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取LIN报文缓冲区中的接收报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com. tsfifo_read_lin_rx_buffer_frame_count (CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_lin_tx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_lin_tx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取LIN报文缓冲区中的发送报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_lin_tx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_flexray_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_flexray_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取Flexray报文缓冲区中的报文数量(包括发送和接收方向)
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == com.tsfifo_read_flexray_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_read_flexray_rx_buffer_frame_count

项目 描述
【函数名称】 s32 com.tsfifo_read_flexray_rx_buffer_frame_count(s32 AIdxChn, ps32 ACount)
【功能介绍】 读取Flexray报文缓冲区中的接收报文数量
【输入参数】 AIdxChn:过滤的通道,下标从0开始。0xFF可表示所有通道

ACount:读取的报文数量

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 s32 msgcount = 0;

if(0 == tsfifo_read_flexray_rx_buffer_frame_count(CH1, &msgcount)){

log(“Success to read message number = %d in the buffer”, msgcount);

}else{

log(“Fail to read message number in the buffer”);

}

com.tsfifo_receive_can_msgs

项目 描述
【函数名称】 s32 com.tsfifo_receive_can_msgs(PCAN ACANBuffers, ps32 ACANBufferSize, s32 AIdxChn, bool AIncludeTx)
【功能介绍】 读取缓存的 CAN 报文帧
【输入参数】 ACANBuffers:数据 Buffer,用于存储读取到的报文,该 Buffer 需要函数调用方创建

ACANBufferSize:CAN报文 Buffer 的大小

AIdxChn:目标通道:对于多通道设备,本函数选择读取哪一个通道的数据,该参数可以为空,默认为通道 1

AIncludeTx:0:仅仅接收 Rx 报文;>0: Tx Rx 报文都读取回来,该参数可以为空,默认为只接收 Rx 报文

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 TCAN buf[10];

int bufsize = 10; //bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if(0 == com.tsfifo_receive_can_msgs(buf, &bufsize, CH1, true)){

log(“Success to read data from fifo, real read data number = %d”, bufsize);

}else{

log(“Fail to read data from fifo”);

}

com.tsfifo_receive_canfd_msgs

项目 描述
【函数名称】 s32 com.tsfifo_receive_canfd_msgs(PCANFD ACANFDBuffers, ps32 ACANBufferSize, s32 AIdxChn, bool AIncludeTx)
【功能介绍】 读取缓存的 CAN FD(包含CAN)报文帧
【输入参数】 ACANFDBuffers:数据 Buffer,用于存储读取到的报文,该 Buffer 需要函数调用方创建

ACANBufferSize:CAN报文 Buffer 的大小

AIdxChn:目标通道:对于多通道设备,本函数选择读取哪一个通道的数据,该参数可以为空,默认为通道 1

AIncludeTx:0:仅仅接收 Rx 报文;>0: Tx Rx 报文都读取回来,该参数可以为空,默认为只接收 Rx 报文

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 TCANFD buf[10];

int bufsize = 10; //bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if(0 == com.tsfifo_receive_canfd_msgs(buf, &bufsize, CH1, true)){

log(“Success to read data from fifo, real read data number = %d”, bufsize);

}else{

log(“Fail to read data from fifo”);

}

com.tsfifo_receive_lin_msgs

项目 描述
【函数名称】 s32 com.tsfifo_receive_lin_msgs(PLIN ALINBuffers, ps32 ABufferSize, s32 AIdxChn, bool AIncludeTx)
【功能介绍】 读取缓存的 LIN 报文帧
【输入参数】 ALINBuffers:数据 Buffer,用于存储读取到的报文,该 Buffer 需要函数调用方创建

ABufferSize:LIN报文 Buffer 的大小

AIdxChn:目标通道:对于多通道设备,本函数选择读取哪一个通道的数据,该参数可以为空,默认为通道 1

AIncludeTx:0:仅仅接收 Rx 报文;>0: Tx Rx 报文都读取回来,该参数可以为空,默认为只接收 Rx 报文

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 TLIN buf[10];

int bufsize = 10; //bufsize should be reset every time before calling tsfifo_receive_xx_msgs

if(0 == com.tsfifo_receive_lin_msgs(buf, &bufsize, CH1, true)){

log(“Success to read data from fifo, real read data number = %d”, bufsize);

}else{

log(“Fail to read data from fifo”);

}

com.tsfifo_receive_flexray_msgs

项目 描述
【函数名称】 s32 com.tsfifo_receive_flexray_msgs(PFlexRay AFRBuffers, ps32 ABufferSize, s32 AIdxChn, bool AIncludeTx)
【功能介绍】 读取缓存的 Flexray报文帧
【输入参数】 AFRBuffers:数据 Buffer,用于存储读取到的报文,该 Buffer 需要函数调用方创建

ABufferSize:Flexray报文 Buffer 的大小

AIdxChn:目标通道:对于多通道设备,本函数选择读取哪一个通道的数据,该参数可以为空,默认为通道 1

AIncludeTx:0:仅仅接收 Rx 报文;>0: Tx Rx 报文都读取回来,该参数可以为空,默认为只接收 Rx 报文

【返回值】 = =0:执行成功

其他值:函数执行失败

【使用示例】 TFlexRay buf[10];

int bufsize = 10; //bufsize should be reset every time before calling tsfifo_receive_flexray_msgs

if(0 == com.tsfifo_receive_flexray_msgs(buf, &bufsize, CH1, true)){

log(“Success to read data from fifo, real read data number = %d”, bufsize);

}else{

log(“Fail to read data from fifo”);

}

缩写

BLF Binary Logging Format
CAN Controller Area Network
CAN FD CAN with Flexible Data-Rate
ID Identifier
LIN Local Interconnect Network
声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
技术分享智能网联

软件更新 | 你期待的新功能来了!TSMaster 202502 新版本亮点抢先看!

2025-3-25 11:49:46

技术分享资料下载

资料下载|Aspice全套模板

2025-4-13 13:04:17

3 条回复 A文章作者 M管理员
  1. user794

    很有用,谢谢题主!后续实践中有任何问题再来请教!

个人中心
今日签到
有新私信 私信列表
搜索