我正在使用STM32CubeIDE对STM32进行编程。
正如您从我正在编写的代码中看到的,“ADC_buffer”的所有元素都被替换为下一个位置元素,除了最后一个元素..它将被从 ADC 读取的新样本填充/替换。
// Shift the buffer and store the last ADC data
for(int i = 0; i < BUFFER_SIZE-1; i++){
ADC_buffer[i] = ADC_buffer[i+1];
}
ADC_buffer[BUFFER_SIZE-1] = ADC_Value;
1) 这是循环缓冲区的实现吗?
2) 如果答案是肯定的,我写的这三行代码和STM32CubeMX设置的循环缓冲区有什么区别? (图像只是描述性的..我没有使用 DMA)
这是循环缓冲区的实现吗?
不。使缓冲区成为“循环”的关键特征是,从逻辑上讲,它从末尾回绕到开头。也就是说,如果写入缓冲区并到达最后一个位置,则继续在第一个位置(假设该位置是空闲的,也可能是空闲的)。如果一个人正在读书,情况也是如此。始终保持对包含有效数据的位置范围的感知,这些位置通常不从索引 0 开始。
循环缓冲区的主要优点之一是不需要在缓冲区内移动数据,这证明了额外的元数据和更复杂的实现是合理的。也就是说,正如您的代码所做的那样,在数组中向下移动数据是循环缓冲区避免的主要事情之一。