OpenEdv-开源电子网

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

fatfs SD卡读数据,txt文件内数据量较大后卡死在f_read处

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-2-1
在线时间
4 小时
发表于 2018-2-3 21:39:03 | 显示全部楼层 |阅读模式
1金钱
fatfs SD卡读数据,txt文件内数据量较大后卡死在f_read处

代码为:
FIL fileobj;
FRESULT fr;
UINT brs;

u8 file_buff[]={0};

void file_open(u8 * file_path)
{
        u32 size=0;
        fr=f_open(&fileobj,(const TCHAR*)file_path,FA_READ|FA_WRITE);
        if(fr==FR_OK)
                {
                        size=f_size(&fileobj);
                        printf("%d",size);
                        f_read(&fileobj,file_buff,size,&brs);
                }
        f_close(&fileobj);
                printf("%s",file_buff);
}


数据量较多时XCOM接收size数值为3032     随后卡死。
数据量较少时XCOM接收为  3260X6Dr1X19,0X75,0X18,0X65,0X18,0X65,0X59,0X6D,0X59,0X65,0X19,0X6D,0X39,0X75,0X59,
0X64,0XD8,0X64,0XD8,0X6C,0XF9,0X75,0X19,0X74,0XF8,0X6C,0X96,0X74,0XD7,0X8D,0X79,
0X5C,0X13,0X64,0X55,0X6C,0XB6,0X64,0X76,0X5C,0X35,0X8D,0X59,0X74,0X95,0X85,0X38,
0X84,0XF7,0X5B,0X92,0X8D,0X17,0X84,0XD6,0X64,0X13,0X95,0X99,0X95,0X79,0X8D,0X79,? (部分乱码)(size值为326)

求解

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-2-1
在线时间
4 小时
 楼主| 发表于 2018-2-4 09:11:11 | 显示全部楼层
本帖最后由 gaofeihaha 于 2018-2-4 09:14 编辑

局部变量过大导致用户堆栈溢出???

for循环以次读取吧。实测747KB文件读取耗时不到0.5秒(STM32F767)

FIL fileobj;
FRESULT fr;
UINT brs;

void file_open(u8 * file_path)
{
         u8 file_buff[255]={0};
        u32 size=0;
        u16 i=0;
        u16 offset=0;
        fr=f_open(&fileobj,(const TCHAR*)file_path,FA_READ|FA_WRITE);
        if(fr==FR_OK)
                {
                        size=f_size(&fileobj);
                        printf("%d",size);
                        for(i=size/255;i>0;i--)
                        {
                                f_lseek(&fileobj,offset);
                                f_read(&fileobj,file_buff,255,&brs);
                                printf("%s",file_buff);
                                offset += 255;
                        }
                        f_lseek(&fileobj,offset);
                        f_read(&fileobj,file_buff,size%255,&brs);
                        printf("%s",file_buff);
                }
        f_close(&fileobj);
               
}
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11964
金钱
11964
注册时间
2013-3-8
在线时间
1274 小时
发表于 2018-2-4 11:25:44 | 显示全部楼层
分次数读,单片机内存本身就不大。一次性读完肯定会出问题的,尤其当文件比较大时
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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