一、我遇到的实际乒乓:
//prototype
void rx_init( uint8_t **buffer0, uint8_t **buffer1);
//usage illustrate
/* config */
imag_addr = (uint8_t *)os_malloc(1, PIC_SIZE * 4, 256); //memory of 4 images
if(imag_addr == NULL) {
ASSERT(0);
}
memset((void *)imag_addr, 0xff, PIC_SIZE * 4);
temp_addr1=imag_addr;
temp_addr2=imag_addr+PIC_SIZE;
rx_init(&temp_addr1, &temp_addr2);
/* input */
one_frame_start(DEV_0);
该实例解释:
1.**buffer0和**buffer1交叉存储
第1次接收的数据存储到**buffer0,第2次接收的数据存储到**buffer1,
第3次.... **buffer0,第4次.... **buffer1,
............
2.one_frame_start是sdk的api,调用一次即开启一次采集接收
3.在实际使用时,假如要用多个内存块挨个存储,且有一些逻辑上的处理,那么就取消乒乓,给**buffer1和**buffer2赋同一个内存块地址参数,这样每次接收时不管硬件怎么乒乓,软件上看都是同一个地址接收到数据,从而避免逻辑复杂化
二、一般的执行流程:
数据进入缓存1
——>数据进入缓存2,同时缓存1中的数据处理并输出
——>数据进入缓存1,同时缓存2中的数据处理并输出