|
libxr
1.0
Want to be the best embedded framework
|
双缓冲区管理类 / Double buffer manager class More...
#include <double_buffer.hpp>
Public Member Functions | |
| DoubleBuffer ()=default | |
| 默认构造一个未初始化的双缓冲对象 Constructs one uninitialized double buffer object | |
| DoubleBuffer (const LibXR::RawData &raw_data) | |
| 构造函数,使用连续内存构造两个缓冲区 Constructs a double buffer using one continuous memory block | |
| void | Init (const LibXR::RawData &raw_data) |
| 绑定连续 backing storage 并重置双缓冲状态 Binds continuous backing storage and resets double-buffer state | |
| void | Reset () |
| 重置 active/pending 状态,但保留已绑定的 backing storage Resets active/pending state while keeping bound backing storage | |
| uint8_t * | ActiveBuffer () const |
| 获取当前正在使用的缓冲区指针 Returns the currently active buffer | |
| uint8_t * | PendingBuffer () const |
| 获取备用缓冲区的指针 Returns the pending (inactive) buffer | |
| uint8_t * | Buffer (int block) const |
| 获取指定编号缓冲区的指针 Returns the pointer of the specified block | |
| size_t | Size () const |
| 获取每个缓冲区的大小(单位:字节) Gets the size of each buffer in bytes | |
| void | Switch () |
| 切换到备用缓冲区(若其有效) Switches to the pending buffer if it's valid | |
| bool | HasPending () const |
| 判断是否有待切换的缓冲区 Checks whether a pending buffer is ready | |
| bool | FillPending (const uint8_t *data, size_t len) |
| 向备用缓冲区写入数据(不可重入) Fills the pending buffer with data (non-reentrant) | |
| bool | FillActive (const uint8_t *data, size_t len) |
| 向当前使用的缓冲区直接写入数据 Fills the active buffer directly | |
| void | EnablePending () |
| 手动启用 pending 状态 Manually sets the pending state to true | |
| size_t | GetPendingLength () const |
| 获取 pending 缓冲区中准备好的数据长度 Gets the size of valid data in pending buffer | |
| size_t | GetActiveLength () const |
| 获取当前活动缓冲区中准备好的数据长度 Gets the size of valid data in active buffer | |
| void | SetPendingLength (size_t length) |
| 设置备用缓冲区的数据长度 Sets the size of the pending buffer | |
| void | SetActiveLength (size_t length) |
| 设置当前活动缓冲区的数据长度 Sets the size of the active buffer | |
| void | FlipActiveBlock () |
| 翻转当前活动缓冲区编号 Flips the current active block index | |
| int | ActiveBlock () const |
| 获取当前活动缓冲区编号 Returns the current active block index | |
| void | SetActiveBlock (bool block) |
| 设置当前活动缓冲区 Sets the active buffer | |
Private Attributes | |
| uint8_t * | buffer_ [2] = {nullptr, nullptr} |
| 双缓冲区指针 / Double buffer pointers | |
| size_t | size_ = 0 |
| 单个缓冲区大小 / Size of each buffer | |
| int | active_ = 0 |
| 当前活动缓冲区编号 / Index of active buffer | |
| bool | pending_valid_ |
| 标记备用区是否准备好 / Whether pending buffer is ready | |
| size_t | active_len_ = 0 |
| 当前活动缓冲区有效数据长度 / Length of active data | |
| size_t | pending_len_ = 0 |
| 备用缓冲区有效数据长度 / Length of pending data | |
双缓冲区管理类 / Double buffer manager class
该类用于在嵌入式场景中管理双缓冲传输结构,支持主动缓冲、备用缓冲切换与填充。 用于实现无缝 DMA 或 USB 数据流水线发送,提高吞吐效率。 This class provides double-buffer control for efficient pipelined transmission such as USB or DMA streaming.
Definition at line 21 of file double_buffer.hpp.
|
explicit |
构造函数,使用连续内存构造两个缓冲区 Constructs a double buffer using one continuous memory block
| raw_data | 连续内存区,大小必须为两个缓冲区之和 / The raw memory to be split |
Definition at line 10 of file double_buffer.cpp.
|
inline |
获取当前活动缓冲区编号 Returns the current active block index
Definition at line 177 of file double_buffer.hpp.
| uint8_t * DoubleBuffer::ActiveBuffer | ( | ) | const |
获取当前正在使用的缓冲区指针 Returns the currently active buffer
Definition at line 47 of file double_buffer.cpp.
| uint8_t * DoubleBuffer::Buffer | ( | int | block | ) | const |
获取指定编号缓冲区的指针 Returns the pointer of the specified block
| block | 缓冲区编号,只允许 0 或 1 / Buffer block index, only 0 or 1 |
Definition at line 57 of file double_buffer.cpp.
| void DoubleBuffer::EnablePending | ( | ) |
手动启用 pending 状态 Manually sets the pending state to true
通常与 FillActive() 配合使用,表示下次发送使用 FillActive 写入的缓冲。
Definition at line 115 of file double_buffer.cpp.
| bool DoubleBuffer::FillActive | ( | const uint8_t * | data, |
| size_t | len ) |
向当前使用的缓冲区直接写入数据 Fills the active buffer directly
| data | 数据源指针 / Source data pointer |
| len | 数据长度 / Length to write |
Definition at line 102 of file double_buffer.cpp.
| bool DoubleBuffer::FillPending | ( | const uint8_t * | data, |
| size_t | len ) |
向备用缓冲区写入数据(不可重入) Fills the pending buffer with data (non-reentrant)
| data | 数据源指针 / Pointer to the source data |
| len | 数据长度(字节) / Data length in bytes |
Definition at line 86 of file double_buffer.cpp.
|
inline |
翻转当前活动缓冲区编号 Flips the current active block index
Definition at line 171 of file double_buffer.hpp.
|
inline |
获取当前活动缓冲区中准备好的数据长度 Gets the size of valid data in active buffer
Definition at line 149 of file double_buffer.hpp.
| size_t DoubleBuffer::GetPendingLength | ( | ) | const |
获取 pending 缓冲区中准备好的数据长度 Gets the size of valid data in pending buffer
Definition at line 120 of file double_buffer.cpp.
| bool DoubleBuffer::HasPending | ( | ) | const |
判断是否有待切换的缓冲区 Checks whether a pending buffer is ready
Definition at line 81 of file double_buffer.cpp.
| void DoubleBuffer::Init | ( | const LibXR::RawData & | raw_data | ) |
绑定连续 backing storage 并重置双缓冲状态 Binds continuous backing storage and resets double-buffer state
| raw_data | 连续内存区,大小必须满足双缓冲对半切分约束;空双缓冲允许 传入 nullptr + 0 |
| raw_data | Continuous memory block satisfying the half-split contract; an empty double buffer may be initialized with nullptr + 0 |
Definition at line 25 of file double_buffer.cpp.
| uint8_t * DoubleBuffer::PendingBuffer | ( | ) | const |
获取备用缓冲区的指针 Returns the pending (inactive) buffer
Definition at line 52 of file double_buffer.cpp.
| void DoubleBuffer::Reset | ( | ) |
重置 active/pending 状态,但保留已绑定的 backing storage Resets active/pending state while keeping bound backing storage
Definition at line 14 of file double_buffer.cpp.
|
inline |
设置当前活动缓冲区 Sets the active buffer
| block | true 表示使用第二个缓冲区,false 表示使用第一个缓冲区 |
Definition at line 185 of file double_buffer.hpp.
|
inline |
设置当前活动缓冲区的数据长度 Sets the size of the active buffer
| length | 数据长度(字节) / Data length in bytes |
Definition at line 165 of file double_buffer.hpp.
|
inline |
设置备用缓冲区的数据长度 Sets the size of the pending buffer
| length | 数据长度(字节) / Data length in bytes |
Definition at line 157 of file double_buffer.hpp.
| size_t DoubleBuffer::Size | ( | ) | const |
获取每个缓冲区的大小(单位:字节) Gets the size of each buffer in bytes
Definition at line 65 of file double_buffer.cpp.
| void DoubleBuffer::Switch | ( | ) |
切换到备用缓冲区(若其有效) Switches to the pending buffer if it's valid
Definition at line 70 of file double_buffer.cpp.
|
private |
当前活动缓冲区编号 / Index of active buffer
Definition at line 190 of file double_buffer.hpp.
|
private |
当前活动缓冲区有效数据长度 / Length of active data
Definition at line 193 of file double_buffer.hpp.
|
private |
双缓冲区指针 / Double buffer pointers
Definition at line 188 of file double_buffer.hpp.
|
private |
备用缓冲区有效数据长度 / Length of pending data
Definition at line 194 of file double_buffer.hpp.
|
private |
标记备用区是否准备好 / Whether pending buffer is ready
Definition at line 191 of file double_buffer.hpp.
|
private |
单个缓冲区大小 / Size of each buffer
Definition at line 189 of file double_buffer.hpp.