关于wince 在读写flash时候突然掉电的问题
昨天,一应用程序员反问了这个问题
在写向flash写数据的时候,突然断电,下次再启动的时候。这个文件变成不可读写了,说是写保护了。
请问大家是否遇到这种情况了?
我看了两个类似的帖子。
http://topic.eeworld.net/u/20080616/11/C34E5388-9A67-4579-9D8A-D61E14CA713A.html
http://topic.eeworld.net/u/20080731/16/80CBBA93-B42B-4BA3-885E-433150D50009.html
感觉很相似。
我起初以为是我的flash驱动有问题,但是我拿一个老外进口的手持机尝试一样断电,也会这样。
那些老帖提到用什么大电容保持电一段时间,觉得听上去可以,但是未必可行。
问了一些网友,他们说他们的机子不会,他也没有做什么保障措施,他们说wince文件系统做了保护。咋我的就会呢?
还有windows XP 突然断电,就会重新检测硬盘才行,wince是否可以这样做做呢?又该如何实现呢?
欢迎大家指点。
那个貌似是微软的 fat 文件系统的通病了,
linux 下一般采用 jffs 文件系统,它能够较好的避免这个问题
建议 LZ 将 TFAT(Transaction-Safe FAT File System) 加入, 可大大地提高 File System 的稳定性.
Paul, Chao @ Techware
引用: 引用 1 楼 paul_chao 的回复:
建议 LZ 将 TFAT(Transaction-Safe FAT File System) 加入, 可大大地提高 File System 的稳定性.
Paul, Chao @ Techware
TFAT和FAT可以共存的吗?
直接选上去就可以了?这个我要看看怎么使用先。编译的DLL和FAT一样,还是要自己在reg bib文件修改的?
Paul, Chao 太厉害了,帮助我不少,加分100
MSDN关于TFAT和FAT的差异, 感觉TFAT主要改进就是2个FATs 不是同时更新的,而是在操作前更新备份的FAT, 操作完成后再更新另一个FAT, 这样文件要么全部写入, 要么全部没有写入,可以防止突然掉电造成FAT表混乱.
——试试使用TFAT先!
引用: 引用 6 楼 gooogleman 的回复:
MSDN关于TFAT和FAT的差异, 感觉TFAT主要改进就是2个FATs 不是同时更新的,而是在操作前更新备份的FAT, 操作完成后再更新另一个FAT, 这样文件要么全部写入, 要么全部没有写入,可以防止突然掉电造成FAT表混乱.
——试试使用TFAT先!
TFAT相比FAT好很多,不过如果你的设备使用Mass Storage的话,还是要权衡一下,使用TFAT的设备在
使用Mass Storage挂载到PC端并不能做到完全兼容。
为啥一定要向某人询问?开个玩笑
产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。
引用: 引用 9 楼 xbsmail 的回复:
为啥一定要向某人询问?开个玩笑
产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。
一直以为断点之后文件损坏是无解的
现在才知道还有这样的方法,改天试试。
引用: 引用 9 楼 xbsmail 的回复:
为啥一定要向某人询问?开个玩笑
产生这个问题的原因主要是由于FAT文件系统本身的问题和NandFlash的特性,本人认为改善这个问题有几个方案,第一个保证供电状态,第二个就是用TFAT,不过TFAT WinXP不认,好知为之。
能连上同步软件即可,不管那么多。
LZ, 您 registry 有沒有加入
"Flags"=dword:00640024 ;FATFS_TFAT_ALWAYS|FATFS_FORCE_TFAT|FATFS_TRANS_DATA
這個值啊, 沒加它還是跑 FATFS 哦
Paul, Chao @ Techware
“不可读写”?也无法打开了?那说明此文件已经损坏。
文件在写入时处于“写保护”,直到写完才会取消保护,允许别的程序访问。瞬间掉电,那么文件肯定无法完全写完整,保护的特性还存在,但是在FAT表中已经有对应的记录,所以能看到,只是文件实际上不完整,那么就无法真实的访问了。
文件的保护跟操作系统和文件系统有很大的关联,不是一个软件能解决的。至少FAT到NTFS都无法解决,否则XP也不需要再自检了。
WINCE也可以做,不过好像必要性不大吧。
; @CESYSGEN IF CE_MODULES_TFAT
fatfsd.dll $(_FLATRELEASEDIR)\tfat.dll NK SH
diskcache.dll $(_FLATRELEASEDIR)\diskcache.dll NK SH
; @CESYSGEN ELSE
; @CESYSGEN IF CE_MODULES_FATFSD
fatfsd.dll $(_FLATRELEASEDIR)\fatfsd.dll NK SH
diskcache.dll $(_FLATRELEASEDIR)\diskcache.dll NK SH
; @CESYSGEN ENDIF
; @CESYSGEN ENDIF
——哦,选上即可。但是要注意不能FAT和TFAT都选,否则FAT会覆盖掉TFAT的。
现在编译完了,你们意思不能在PC用同步软件看?但是我现在可以啊。
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。
引用: 引用 13 楼 clementzhao 的回复:
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。
我更新了2008 和2007全年的补丁了。
引用: 引用 14 楼 wogoyixikexie_gliet 的回复:
引用 13 楼 clementzhao 的回复:
TFAT只解决了一部分问题,换上MLC试试,包死的挺挺的。
XP认肯定是没问题的,不过TFAT被FAT写过以后,就没有TFAT特性了。要完全支持,安装补丁包吧。
我更新了2008 和2007全年的补丁了。
extfat的补丁啊,别理解错了
引用: 引用 15 楼 morris88 的回复:
那个貌似是微软的 fat 文件系统的通病了,
linux 下一般采用 jffs 文件系统,它能够较好的避免这个问题
汗,研究过再讨论好不。jffs主要针对nor,yaffs才是nand。你能想象开发的东西用yaffs,插上windows却识别不出来吗。技术是技术,产品是产品。ExFAT和yaffs无法相提并论。