OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3587|回复: 4

SD 卡大型檔案讀取

[复制链接]

13

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-11-3
在线时间
43 小时
发表于 2017-1-12 11:56:18 | 显示全部楼层 |阅读模式
1金钱
請教尊敬的大神們:

小弟正在學習 SD 檔案存取,目前遇到了個問題。

螢幕截圖 2017-01-12 11.47.36.png

如範例所示,如果 TEST.TXT 內容大於 > 1 Mega,那麼 SD_buffer[4096] 也要相對改成 1 Mega 以上嗎?那記憶體不就爆掉了?
還是有其他方法可以讀取內容顯示呢?

最佳答案

查看完整内容[请看2#楼]

f_read()函数返回值是读取到的字节数,如果读到结尾处返回值一般就小于指定读取长度,所以建议使用 do { ... rcv_cnt=f_read(...); ... }while(rcv_cnt
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-12 11:56:19 | 显示全部楼层
f_read()函数返回值是读取到的字节数,如果读到结尾处返回值一般就小于指定读取长度,所以建议使用
do
{
   ...
   rcv_cnt=f_read(...);
   ...
}while(rcv_cnt<sizeof(buffer));
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2017-1-12 19:20:45 | 显示全部楼层
一段一段读,每次只读一部分,加个循环判断是否读完了。
回复

使用道具 举报

头像被屏蔽

227

主题

293

帖子

0

精华

禁止发言

积分
1006
金钱
1006
注册时间
2012-2-9
在线时间
69 小时
发表于 2017-1-13 09:48:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

13

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-11-3
在线时间
43 小时
 楼主| 发表于 2017-1-14 15:01:16 | 显示全部楼层
yyx112358 发表于 2017-1-12 11:56
f_read()函数返回值是读取到的字节数,如果读到结尾处返回值一般就小于指定读取长度,所以建议使用
do
...

for (;;)
    {
     SD_Res = f_read(&SD_File,SD_buffer,256,&SD_br);
     if (SD_br < 256-1) break;
     printf("%s",SD_buffer);
     }
SD_Res = f_close(&SD_File);

謝謝大神,按大神指引的方向果然問題解決了。
請受小弟真誠一拜。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 20:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表