硬汉嵌入式论坛

 找回密码
 立即注册
查看: 466|回复: 6
收起左侧

[SD/SDIO] 问下大神,哪个例程里有遍历sd卡或者u盘里面的文件进行保存驱动啊 ?

[复制链接]

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2023-7-12 09:52:11 | 显示全部楼层 |阅读模式




问下大神,哪个例程里有遍历sd卡或者u盘里面的文件进行保存驱动啊 ?




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-7-12 14:10:36 | 显示全部楼层
用那个文件系统,这个帖子里面FatFS,FileX和FlashFS我都整理了当前目录下遍历所有文件并打印出来

https://www.armbbs.cn/forum.php?mod=viewthread&tid=107689
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-7-12 14:39:20 | 显示全部楼层
本帖最后由 hpdell 于 2023-7-12 21:29 编辑
eric2013 发表于 2023-7-12 14:10
用那个文件系统,这个帖子里面FatFS,FileX和FlashFS我都整理了当前目录下遍历所有文件并打印出来

https ...

目前使用的是 fatfs

我目前是搜索到 sd 卡目录里面的相关文件后进行保存,第一次搜索保存,用完后释放内存可以,

但是第二次搜索 就出现了错误了,貌似是内存溢出错误,看程序也没有发现 什么问题,目前有点纠结呀 ?


#define  FILE_SEARCH_OK   0x00
#define  FILE_SEARCH_ER   0x01


#define  FF_LFN_BUF   255

#define FILEMGR_LIST_DEPDTH                        128   // 文件总个数
#define FILEMGR_FILE_NAME_SIZE                     (FF_LFN_BUF+1)   // 文件名总长度


typedef struct _LineTypeDef {
uint32_t  size;
uint16_t type;
  char *pname;
}_LineTypeDef_t;


typedef struct __FileTypeDef {
  _LineTypeDef_t  *file[FILEMGR_LIST_DEPDTH] ;
  uint16_t    ptr;

}_FileTypeDef_t;


_FileTypeDef    FileList;

// 申请内存

static uint16_t  File_MallocBuff(uint16_t memNum)
{
        uint16_t cnt;

        if((memNum == 0) || (memNum > FILEMGR_LIST_DEPDTH))
                return FILE_SEARCH_ER;
        for(cnt = 0;cnt < memNum; cnt++)
        {
                FileList.file[cnt] = (_LineTypeDef_t *)mymalloc(SDRAMEX,  sizeof(_LineTypeDef_t));
                FileList.file[cnt]->pname = (char *)mymalloc(SDRAMEX,  FILEMGR_FILE_NAME_SIZE);   // 每个文件名大小缓存
               
                if((FileList.file[cnt] == NULL) || (FileList.file[cnt]->pname == NULL)) {
                        FATFS_Log("File_MallocBuff err ...? \r\n");
                        return FILE_SEARCH_ER;
                }
                memset(&FileList.file[cnt]->pname[0], 0, FILEMGR_FILE_NAME_SIZE);
        }
        return FILE_SEARCH_OK;
}


// 释放内存

static uint16_t  File_FreeBuff(uint16_t memNum)
{
        uint16_t cnt;
        if(memNum == 0)
                return FILE_SEARCH_ER;

        for(cnt = 0;cnt < memNum; cnt++)
        {
                myfree(SDRAMEX, &FileList.file[cnt]->pname[0]) ;  // 原来是这个  & 符号是多余的, 哎, 惭愧惭愧,
                myfree(SDRAMEX, &FileList.file[cnt]) ;
        }  

        FileList.ptr = 0;         // 释放内存后,相应的变量也清0
        return FILE_SEARCH_OK;
}



大神帮我看看这个内存申请,释放 到底是哪里有问题呀 ???




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-7-13 09:18:21 | 显示全部楼层
hpdell 发表于 2023-7-12 14:39
目前使用的是 fatfs

我目前是搜索到 sd 卡目录里面的相关文件后进行保存,第一次搜索保存,用完后释 ...

先别用动态申请释放,直接开个静态的,反复测试下是否正常。
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-7-13 11:30:27 | 显示全部楼层
eric2013 发表于 2023-7-13 09:18
先别用动态申请释放,直接开个静态的,反复测试下是否正常。




已经搞好了,就是在释放时多写了一个 & 这个符号,吧这个符号删除就可以了

        for(cnt = 0;cnt < memNum; cnt++)
        {
                myfree(SDRAMEX, FileList.file[cnt]->pname[0]) ;  // 这样就可以了
                myfree(SDRAMEX, FileList.file[cnt]) ;
        }  



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-7-13 14:11:14 | 显示全部楼层
hpdell 发表于 2023-7-13 11:30
已经搞好了,就是在释放时多写了一个 & 这个符号,吧这个符号删除就可以了

        for(cnt = 0 ...

果然是动态内存问题。
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-7-13 17:30:29 | 显示全部楼层
eric2013 发表于 2023-7-13 14:11
果然是动态内存问题。

是的
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 00:00 , Processed in 0.214527 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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