数据传输缓冲逻辑
串行通信接口 (SCI) 缓冲逻辑使用 Data Store Memory 块中的全局变量 dataOutput 来管理主机和目标硬件之间的数据传输。使用此方法管理来自超过 FIFO 大小的通信模块的数据,方法是将传入的数据临时存储在缓冲区中,并且仅在缓冲区满时才访问它。有关详细信息,请参阅使用 SCI 模块进行串行通信。
本文以目标模型为例,演示了数据传输的缓冲逻辑。要从 MATLAB® 命令行窗口打开 Simulink® 目标模型,请使用以下命令:
open_system('c28xSCIRxDataWithBuffer.slx');
缓冲区管理
接收到的数据会存储在缓冲区中,直到缓冲区达到容量上限。
当缓冲区满时,GPIO 引脚会切换状态以指示准备就绪,从而触发外部中断。
中断会启动数据传输并重置 GPIO 信号。
了解 MATLAB 函数 dataBufferImpl 中的缓冲区实现
缓冲区被定义为使用 Data Store Memory 块的全局变量。缓冲区处理逻辑在 MATLAB 脚本中实现,然后使用 MATLAB 函数块在 Simulink 中调用该脚本。该函数将传入的数据存储到缓冲区中,并在缓冲区满时触发信号。

输入
dataInput:待缓冲的数据。
输出
dataReady:指示缓冲区是否已满的标志。
关键点
Buffer Size:缓冲区大小。
Buffer Initialization:初始化一个持久缓冲区
(cachedDataOutput)以临时存储传入的数据。Data Storage:使用全局变量
dataOutput从cachedDataOutput复制已缓冲的数据(数据准备就绪后)。C Function Integration:在代码生成期间调用外部 C 函数
copyDataIntoBuffer,将输入数据复制到缓冲区中。C 函数用于使用指针高效地处理内存操作。Buffer Full Signal:当
cachedDataOutput缓冲区已满时,将dataReady设置为1,并将缓冲的数据复制到dataOutput。
C 函数:将数据复制到缓冲区
根据缓冲区容量,将输入数据复制到缓冲区中。
输入
dataOutput:指向用于存储数据的缓冲区的指针。dataInput:指向传入数据的指针dataInputSize:传入数据的大小。bufferSize:总缓冲容量。
输出
如果缓冲区已满且数据已准备就绪,则返回 1;否则,返回 0。