硬汉嵌入式论坛

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

[FileX] 重启后打开文件返回:FX_FILE_CORRUPT

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-10-18 11:13:37 | 显示全部楼层 |阅读模式
本帖最后由 969176707 于 2024-10-18 11:15 编辑

使用STM32H743单片机,FileX挂载到W25Q256,按fx_file_create->fx_file_open->fx_file_write->fx_file_close->fx_file_open->fx_file_read->fx_file_close这个顺序操作没有问题,重启后想执行fx_file_open->fx_file_read->fx_file_close,结果在fx_file_open的时候就会报错,返回:8(FX_FILE_CORRUPT)。求教是什么原因?



工程:通过百度网盘分享的文件:FileX链接:https://pan.baidu.com/s/1suO9HUfgAyH2kHzRo_KuKA?pwd=ka8v 提取码:ka8v

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-10-19 10:02:03 | 显示全部楼层
FileX + SPI Flash,之前有坛友也遇到过类似问题。不过我没有测试过。

你对比下官方的看看

https://github.com/STMicroelectr ... Read_File/README.md
回复

使用道具 举报

9

主题

66

回帖

108

积分

初级会员

积分
108
发表于 2024-10-19 11:23:58 | 显示全部楼层
可能真的损坏了,文件删了重建。
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-10-23 16:36:24 | 显示全部楼层
gihub有人反映过这个问题,即掉电时正在写文件的话,这个文件大概率出现文件损坏的错误,官方至今也没有修复
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-17 21:31:13 | 显示全部楼层
我也遇到这个问题了,是在SD卡上出现的,但是另一个板子没这些问题。不知道是配置上的问题还是怎么。
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-18 08:31:57 | 显示全部楼层
文件都在磁盘上,先以此顺序fx_file_open->fx_file_read->fx_file_close操作一个文件,然后再打开另一个文件,就出现返回:8(FX_FILE_CORRUPT)的情况了。
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-18 08:46:10 | 显示全部楼层
很邪门儿的,只读方式打开第一个文件,读,关闭,再打开第二个文件,报08错误。如果以写的方式打开第一个文件,再打开第二个文件,就没问题。然后如果以写的方式打开,默认指针在文件最后,如果是以读方式打开,文件指针在0处。如果第一个文件以写打开,第二个以读打开,没问题,第三个再以读打开,也报08错误。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-11-18 17:58:32 | 显示全部楼层
fx_file_open->fx_file_seek(&fx_file, 0)->fx_file_read->fx_file_close

按这个方式,你打开文件把这个文件的seek到起始位置0,在读文件试试。
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-18 22:15:33 | 显示全部楼层
pplinux123456 发表于 2024-11-18 17:58
fx_file_open->fx_file_seek(&fx_file, 0)->fx_file_read->fx_file_close

按这个方式,你打开文件把这个 ...

打开第二个文件时,open就报错了,还到不了seek函数。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-11-19 09:31:59 | 显示全部楼层
ccschen 发表于 2024-11-18 22:15
打开第二个文件时,open就报错了,还到不了seek函数。


fx_media_open->fx_file_open->fx_file_seek->fx_file_read(第一个文件)->fx_file_close ->fx_file_open->fx_file_seek->fx_file_read(第二个文件)->fx_file_close-->fx_media_close->Loop(循环整个过程N次),有测试是可以的没有报错,检测下你的FX_FILE 变量,是否使用的是同一个。我在SD卡和nor flash上都有测试
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-19 14:18:35 | 显示全部楼层
pplinux123456 发表于 2024-11-19 09:31
fx_media_open->fx_file_open->fx_file_seek->fx_file_read(第一个文件)->fx_file_close ->fx_file_ope ...

fx_file变量是同一个,这相当于fatfs的文件句柄吧,都先关闭了的,不应该存在冲突。
跟踪了下,都是在fx open里面的这个位置返回错误的。

[C] 纯文本查看 复制代码
            /* Check the bytes available in the cluster chain against the directory entry file size.  */
            if ((bytes_available < file_ptr -> fx_file_dir_entry.fx_dir_entry_file_size) ||
                ((cluster_count) && (contents < fat_last)))
            {
                /* File is corrupt, release media protection.  */
                FX_UNPROTECT

                /* Return a corrupt file error status.  */
                return(FX_FILE_CORRUPT);
            }
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-19 14:56:20 | 显示全部楼层
本帖最后由 ccschen 于 2024-11-19 16:54 编辑
ccschen 发表于 2024-11-19 14:18
fx_file变量是同一个,这相当于fatfs的文件句柄吧,都先关闭了的,不应该存在冲突。
跟踪了下,都是在fx ...

下载.png
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-19 20:46:18 | 显示全部楼层
pplinux123456 发表于 2024-11-19 09:31
fx_media_open->fx_file_open->fx_file_seek->fx_file_read(第一个文件)->fx_file_close ->fx_file_ope ...

目前就这样的情况fx_media_open->fx_file_open(第一个文件,正常)->fx_file_seek->fx_file_read->fx_file_close ->fx_file_open(第二个文件,正常)->fx_file_seek->fx_file_read->fx_file_close-->fx_file_open(第一个文件,0x08)->fx_file_seek->fx_file_read->fx_file_close ->fx_file_open(第二个文件,0x08)->fx_file_seek->fx_file_read->fx_file_close
用的同一个fx_file文件工作区,第一二次都没问题,第三次和第四次都返回0x08错误。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-11-20 08:41:41 | 显示全部楼层
ccschen 发表于 2024-11-19 20:46
目前就这样的情况fx_media_open->fx_file_open(第一个文件,正常)->fx_file_seek->fx_file_read->fx_file_ ...

感觉像你fx_media_open的时候内存没给够,你这样测试一下,在fx_media_open后,

status =  fx_media_space_available(&nor_ospi_flash_disk, &available_space_pre);

printf("User available NOR Flash disk space size before file is written: %lu bytes.\r\n", available_space_pre);

fx_file_open(第一个文件,正常)->fx_file_seek->fx_file_read->fx_file_close ->fx_file_open(第二个文件,正常)->fx_file_seek->fx_file_read->fx_file_close

status =  fx_media_space_available(&nor_ospi_flash_disk, &available_space_post);

printf("User available NOR Flash disk space size after file is written: %lu bytes.\r\n", available_space_post);
printf("The test file occupied a total of %lu cluster(s) (%u per cluster).\r\n",
                                 (available_space_pre - available_space_post) / (nor_ospi_flash_disk.fx_media_bytes_per_sector * nor_ospi_flash_disk.fx_media_sectors_per_cluster),
                                 nor_ospi_flash_disk.fx_media_bytes_per_sector * nor_ospi_flash_disk.fx_media_sectors_per_cluster);
在循环打开读一文件,读二文件,看看,活动的空间这里,正常在不创建文件的情况下这个是不变化的。

回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-20 13:34:35 | 显示全部楼层
pplinux123456 发表于 2024-11-20 08:41
感觉像你fx_media_open的时候内存没给够,你这样测试一下,在fx_media_open后,

status =  fx_media_s ...

实在不晓得什么问题,另一个型号的板子大同小异,都没这些问题,只是各种内存给得够,将FX_OPEN_FOR_READ改为FX_OPEN_FOR_READ_FAST,一个文件也能读出一部分扇区,然后就报08错误。然后有效空间都是4G以上,因为超过4G的SD卡,都是返回0xFFFFFFFF。我再把系统内存这些都加大,看是什么情况。
回复

使用道具 举报

27

主题

183

回帖

264

积分

高级会员

积分
264
发表于 2024-11-20 15:14:03 | 显示全部楼层
pplinux123456 发表于 2024-11-20 08:41
感觉像你fx_media_open的时候内存没给够,你这样测试一下,在fx_media_open后,

status =  fx_media_s ...

结贴,TX_APP_STACK_SIZE加大就行了,具体到我这里,弄了5k才够。这是一个boot程序,带iap功能,一个自定义任务,比如按键检测,以及调用FileX, USBX,相关的功能,这个自定义的任务之前内存给小了,才给512字节。TX_APP_MEM_POOL_SIZE定义了10k,FX_APP_MEM_POOL_SIZE 定义了20k,UX_DEVICE_APP_MEM_POOL_SIZE给了7k.

TX_APP_STACK_SIZE没给够时,一个文件,读一部分后就报08错误。这个ThreadX看内存之类的可能是没FREERTOS直观,或者自己没玩儿转。

ps:好像总贴是别人发的,说结贴不合适
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-2-17 10:50:42 | 显示全部楼层
楼主有找到问题原因吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 22:16 , Processed in 0.348368 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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