今天在闪存FMD函数中加入调试信息发现,写或者改闪存中文件的文件名时,系统其实没死,只是一直在进行下面的操作,只不过界面上鼠标没响应,看着"假死"了。
->FMD_GetBlockStatus //进入FMD_GetBlockStatus函数
->FRS=18100 //FMD_ReadSector函数读取0x18100
<-FRZ = 2 //读spare区
<-FMD_GetBlockStatus//FMD_GetBlockStatus函数执行结束
->FRS=18100//FMD_ReadSector函数读取0x18100
<-FRZ = 2//读spare区
->FRS=18100//FMD_ReadSector函数读取0x18100
<-FRZ = 1//读data区
->FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
->FRS=FB40
<-FRZ = 1
->FMD_GetBlockStatus
->FRS=18100
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=18100
<-FRZ = 2
->FRS=18100
<-FRZ = 1
->FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
->FRS=FB40
<-FRZ = 1
....一直循环运行
一直在Get 0xFB40和0x18100的状态,和读两个扇区中的数据。
我把两个扇区的内容读出来比较发现,内容基本相同,但是有几个字节的一位不对,比如一个是0xE0一个为0xA0。
我想是不是系统是要把一个扇区的内容写到另一个扇区(有个扇区为数据备份扇区),但是操作总是不成功,所以就一直循环操作。
但是没出问题前或恢复一下怎么写文件,改文件名等都是正常的。系统写文件到闪存时,不成功为什么不直接返回失败,而一直在死循环里面走的,有点不明白,望高手指教。
引用: 引用 21 楼 garyliu1104 的回复:
今天在闪存FMD函数中加入调试信息发现,写或者改闪存中文件的文件名时,系统其实没死,只是一直在进行下面的操作,只不过界面上鼠标没响应,看着"假死"了。
->FMD_GetBlockStatus //进入FMD_GetBlockStatus函数
->FRS=18100 //FMD_ReadSector函数读取0x18100
<-FRZ = 2 //读spare区
<-FMD_GetBlockStatus//FMD_GetBlockStatus函数执行结束
->FRS=18100//FMD_ReadSector函数读取0x18100
<-FRZ = 2//读spare区
->FRS=18100//FMD_ReadSector函数读取0x18100
<-FRZ = 1//读data区
->FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
->FRS=FB40
<-FRZ = 1
->FMD_GetBlockStatus
->FRS=18100
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=18100
<-FRZ = 2
->FRS=18100
<-FRZ = 1
->FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
<-FMD_GetBlockStatus
->FRS=FB40
<-FRZ = 2
->FRS=FB40
<-FRZ = 1
....一直循环运行
一直在Get 0xFB40和0x18100的状态,和读两个扇区中的数据。
我把两个扇区的内容读出来比较发现,内容基本相同,但是有几个字节的一位不对,比如一个是0xE0一个为0xA0。
我想是不是系统是要把一个扇区的内容写到另一个扇区(有个扇区为数据备份扇区),但是操作总是不成功,所以就一直循环操作。
但是没出问题前或恢复一下怎么写文件,改文件名等都是正常的。系统写文件到闪存时,不成功为什么不直接返回失败,而一直在死循环里面走的,有点不明白,望高手指教。
lz确实是蛮有细心和耐心的,距离问题的解决不远了
fal里面是有一些类似的bug,你看一下你的读写失败的情况下是否返回了错误的值
我用的是NOR Flash,写几次就会报disk full,搞不清楚怎么回事儿!
下午结贴,最终决定数据缓存不用文件系统了,只保留了32M的fat系统用来存储配置文件,一般是只读的。其他的闪存区域自己来管理存储数据。