另外,必须是方案2.
环形队列,实际上就是做FIFO,很简单的.
给你我们阿波罗开发板录音机实验的FIFO代码:
[mw_shl_code=cpp,true]
u8 *sairecbuf1; //SAI1 DMA接收BUF1
u8 *sairecbuf2; //SAI1 DMA接收BUF2
//REC录音FIFO管理参数.
//由于FATFS文件写入时间的不确定性,如果直接在接收中断里面写文件,可能导致某次写入时间过长
//从而引起数据丢失,故加入FIFO控制,以解决此问题.
vu8 sairecfifordpos=0; //FIFO读位置
vu8 sairecfifowrpos=0; //FIFO写位置
u8 *sairecfifobuf[SAI_RX_FIFO_SIZE];//定义10个录音接收FIFO
FIL* f_rec=0; //录音文件
u32 wavsize; //wav数据大小(字节数,不包括文件头!!)
u8 rec_sta=0; //录音状态
//[7]:0,没有开启录音;1,已经开启录音;
//[6:1]:保留
//[0]:0,正在录音;1,暂停录音;
//读取录音FIFO
//buf:数据缓存区首地址
//返回值:0,没有数据可读;
// 1,读到了1个数据块
u8 rec_sai_fifo_read(u8 **buf)
{