解锁TSMaster fifo函数:报文读取的高效方法

描述

 

前言:
 

TSMaster目前有两种读取报文的模式:回调函数模式和fifo模式。fifo函数是TSMaster近期新增的函数,本文将重点介绍fifo模块。关于回调函数的使用方法可以参考帮助模块的《快速入门》手册。

 

1.

技术背景

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

fifo

图 1:小程序的回调模块

 

fifo

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

 

2.

fifo函数概述

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

 

典型应用:

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

 

3.

fifo函数读取报文功能实现

3.1 功能实现


 

3.1.1 读取CAN报文

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

 

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

fifo

图 3: 程序启动事件

 

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

fifo

图 4: 按键事件

 

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

fifo

图 5: 程序停止事件

 

【源码如下】

fifo

 

3.1.2 读取LIN报文

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

 

【源码如下】

fifo

 

3.1.3 读取FlexRay报文

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

 

【源码如下】

fifo

 

3.2 实现效果

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

fifo

图 6: 实现效果

 

4.

TSMaster fifo函数说明

4.1 fifo函数说明

 

4.1.1 com.tsfifo_enable_receive_fifo

fifo

 

4.1.2 com.tsfifo_disable_receive_fifo

fifo

 

4.1.3 com.tsfifo_enable_receive_error_frames

fifo

 

4.1.4 com.tsfifo_disable_receive_error_frames

fifo

 

4.1.5 com.tsfifo_add_can_canfd_pass_filter

fifo

 

4.1.6 com.tsfifo_delete_can_canfd_pass_filter

fifo

 

4.1.7 com.tsfifo_add_lin_pass_filter

fifo

 

4.1.8 com.tsfifo_delete_lin_pass_filter

fifo

 

4.1.9 com.tsfifo_clear_can_receive_buffers

fifo

 

4.1.10 com.tsfifo_clear_canfd_receive_buffers

fifo

 

4.1.11 com.tsfifo_clear_lin_receive_buffers

fifo

 

4.1.12 com.tsfifo_clear_flexray_receive_buffers

fifo

 

4.1.13 com.tsfifo_read_can_buffer_frame_count

fifo

 

4.1.14 com.tsfifo_read_can_rx_buffer_frame_count

fifo

 

4.1.15 com.tsfifo_read_can_tx_buffer_frame_count

fifo

 

4.1.16 com.tsfifo_read_canfd_buffer_frame_count

fifo

 

4.1.17com.tsfifo_read_canfd_rx_buffer_frame_count

fifo

 

4.1.18 com.tsfifo_read_can_tx_buffer_frame_count

fifo

 

4.1.19 com.tsfifo_read_lin_buffer_frame_count

fifo

 

4.1.20 com.tsfifo_read_lin_rx_buffer_frame_count

fifo

 

4.1.21 com.tsfifo_read_lin_tx_buffer_frame_count

fifo

 

4.1.22 com.tsfifo_read_flexray_buffer_frame_count

fifo

 

4.1.23 com.tsfifo_read_flexray_rx_buffer_frame_count

fifo

 

4.1.24 com.tsfifo_receive_can_msgs

fifo

 

4.1.25 com.tsfifo_receive_canfd_msgs

fifo

 

4.1.26 com.tsfifo_receive_lin_msgs

fifo

 

4.1.27 com.tsfifo_receive_flexray_msgs

fifo

 

5.

缩写

BLF

Binary Logging Format

CAN

Controller Area Network

CAN FD

CAN with Flexible Data-Rate

ID

Identifier

LIN

Local Interconnect Network

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分