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

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 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献