环形FIFO 使用注意事项


以下内容主要说明环形FIFO 的在多线程环境下的使用注意事项。

FIFO 读取操作与FIFO写入操作

FIFO读取操作或FIFO 写入操作过程中,当达到分配的内存空间尾部时需要进行跳转操作。
如果代码段1所示,如果在write_index++ 后 且write_index = FIFO_SIZE。 此时产生中断并调用write_index 将产生严重的错误。
代码段2 采用先放入局部变量中进行操作,然后再将结果放入wr_idx 中,这种做法理论上是没有问题的。但是一旦编译自作聪明,将局部变量优化掉,肯能会导致一样的结果。所以有必要采用代码段 3的操作方法。

代码段 1

write_index++;
if(write_index >= FIFO_SIZE)
{
	write_index = 0;
}

代码段 2

wr_idx = write_index;
wr_idx++;
if(wr_idx >= FIFO_SIZE)
{
	wr_idx = 0;
}
write_index = wr_idx;

代码段 3

    CRITICAL_REGION_ENTER();
	write_index++;
	if(write_index >= FIFO_SIZE)
	{
		write_index = 0;
	}
    CRITICAL_REGION_EXIT();

环形FIFO多线程操作

当前环形FIFO 的读操作只能有一个线程,写操作也只能有一个线程。如果读操作或者写操作需要多个线程时,将读写操作函数放入整个临界区。

关于8位机或16位机 32位机

8位单片机,当环形FIFO 的write_index 与 read_index 的变量长度大于8 BIT 时 读写操作都是非原子操作。当write_index 与 read_index 的变量长度等于8 BIT 则读操作为原子操作,写操作不是原子操作。
因此在对write_index 和read_index 读写操作时必须执行原子操作,C51的原子操作可以参考:
https://mp.csdn.net/console/editor/html/105036340

因此在8位机或者16位机上需要注意这个问题,在32位机上write_index 与 read_index 为 变量长度大于32时也需要注意。
注意在C51单片机中有局部变量的函数不可以重入,计算长度的函数中存在局部变量,因此整个函数需要在临界区中执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 环形FIFO DMA接收是一种用于数据传输的技术。它通过创建一个环形缓冲区,实现高效、连续的数据接收。 首先,环形FIFO DMA接收需要一个环形缓冲区来存储接收到的数据。该缓冲区被划分为多个大小相等的单元,每个单元都有一个指针指向下一个存储位置。 当数据到达时,DMA控制器接收数据并将其写入环形缓冲区的当前位置。然后,指针指向下一个位置,并且DMA控制器继续接收数据并将其写入新的位置。如果指针到达缓冲区的末尾,则它将被重置为缓冲区的开始位置,实现循环。 接收端可以定期检查环形缓冲区中的数据。它可以使用指针来确定当前位置,并从该位置开始读取数据。如果指针到达缓冲区的末尾,则它将被重置为缓冲区的开始位置。 使用环形FIFO DMA接收有许多好处。首先,它可以实现高效的数据接收,因为DMA控制器可以连续地接收数据并减少CPU的负载。其次,它可以减少缓冲区溢出的风险,因为数据会循环写入缓冲区。最后,它可以实现无缝的数据接收,因为接收端可以定期读取和处理缓冲区中的数据,而无需等待整个数据传输完成。 总之,环形FIFO DMA接收是一种高效、连续的数据接收技术。它通过创建一个环形缓冲区来实现数据的循环写入和无缝接收。这种技术可以提高数据传输的效率,并减轻CPU的负担。 ### 回答2: 环形FIFO DMA接收是一种用于高效率数据传输的技术。DMA(直接内存访问)是一种通过绕过CPU将数据直接传输到内存的方式,可以显著提高数据传输速度和系统性能。 环形FIFO DMA接收是指将输入数据按照环形FIFO(先进先出)的方式进行接收处理。在传统的DMA接收中,数据被连续地写入内存中,这样在处理数据时需要频繁地重置读指针和写指针,增加了处理的复杂性。而使用环形FIFO的方式可以减轻这种负担。 在环形FIFO DMA接收中,接收数据的环形FIFO被划分为若干个固定大小的缓冲区,每个缓冲区用于存储一块数据。当接收到数据时,DMA控制器将数据直接写入当前空闲的缓冲区中,而不需要重置指针。当缓冲区写满时,DMA控制器会自动切换到下一个空闲的缓冲区。同时,处理器可以在后台处理上个缓冲区的数据,而不需要等待数据传输完成。 这种环形FIFO的设计使得数据传输和处理可以同时进行,提高了系统的效率和响应速度。同时,由于使用了固定大小的缓冲区,可以方便地进行数据管理和处理。 总结起来,环形FIFO DMA接收是一种高效率的数据传输技术,通过使用环形FIFO缓冲区,可以实现数据传输和处理的同时进行,提高系统的性能和响应速度。 ### 回答3: 环形FIFO DMA接收是一种用于数据传输的技术。它主要用于在计算机系统中,将数据从外部设备传输到内存中。 环形FIFO(First In First Out)是一种存储数据的方式,它类似于队列的概念。当有数据要被传输到内存时,这些数据首先被存储在环形FIFO中,并按照先进先出的原则进行传输。这种存储方式可以有效地处理大量的数据,减少数据传输中的延迟。 DMA(Direct Memory Access)是一种数据传输方式,它可以绕过CPU的干预,直接将数据从外部设备传输到内存中,减轻了CPU的负担。DMA操作由硬件控制器完成,提高了数据传输的效率。 环形FIFO DMA接收是将环形FIFO和DMA技术结合起来使用的一种数据接收方式。当数据从外部设备传输到内存时,首先经过DMA控制器的处理,然后进入环形FIFO进行存储。通过环形FIFO的存储方式,可以保证数据的顺序性,避免数据的丢失或混乱。 环形FIFO DMA接收在数据传输过程中具有很多优点。首先,它可以提高数据传输的速度和效率,减少CPU的负担。其次,由于环形FIFO的存储方式,数据可以按照先进先出的原则进行传输,确保数据的完整性和准确性。另外,环形FIFO DMA接收还能够处理大量的数据,适用于高频率的数据传输场景。 综上所述,环形FIFO DMA接收是一种高效、快速且可靠的数据传输方式,可以在计算机系统中广泛应用于数据接收和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值