Mushan T9 2016-11-10 12:28 采纳率: 0%
浏览 8350

fats文件系统中,用f_read函数读取数据存在的问题。

uint16_t buff[4096] = {0};
uint32_t ReadBuff[1024] = {0};

void Play(void)
{
static uint32_t j = 0;
static uint32_t i = 0;

f_mount(&fs,"0:",1);
res = f_open(&fdst,"0:/music.wav",FA_READ);
if(res==FR_OK)
{
brw = 0;
while(1)
{
res = f_read(&fdst,ReadBuff,sizeof(ReadBuff),&brw)
if(res||brw==0) break;
while(ReadBuff[i]!='\0')
{
buff[j] = (u8)(ReadBuff[i]);
j++;
buff[j] = (u8)(ReadBuff[i]>>8);
j++;
buff[j] = (u8)(ReadBuff[i]>>16);
j++;
buff[j] = (u8)(ReadBuff[i]>>24);
j++;
i++;
}
i = 0;
j = 0;
//startup_DMA((u32 DAC_ADRSS,u8 BuffSize ));
memset(ReadBuff,0,sizeof(ReadBuff));
menmset(buff,0,sizeof(buff));
}
f_close(&fdst);
}
}

从SD卡中读取.wav文件,然后把数据传到DAC输出。因为f_read读出是uint型的,所以我要转成uint16_t。我的.wav文件大小有20k左右,依据上面给数组分配的大小,我需要连续读几次才能完成,但是存在如下的问题:
如果我定义buff的大小>.wav文件的大小,f_read函数就可以连续几次读出数据。但是像我上面所定义uint16_t buff[4096]的话,f_read只读了一次4096字节,第二次读取的时候就返回错误09,怎么回事呢? 难道数组buff的大小会影响到 f_read函数?还是我读完之后立即把uint32_t 转 uint16_t所影响的?

  • 写回答

2条回答 默认 最新

  • BM_Aino 2024-02-22 15:23
    关注

    f_mount()执行挂载后,你的取消挂载操作是不是没有执行啊?只看到你f_close的操作

    评论

报告相同问题?

悬赏问题

  • ¥15 写uniapp时遇到的问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流