This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

NAND Flash File System ssue

I am using LPC1788 with Keil MDK4 along with RLFlash FS[4GB External NAND] & RTX Kernel.
In my application i use the NAND Flash to store TEST Reports & activity logs.

Each report is stored in individual file & there are 500 reports in each folder with a max count of 5000 reports[10 folders].data is written only once in the report file[open->write->close]

In the activity log file, the data is appended.In my case, i have appended data to the file around 10000 times[~50 bytes per append].Every time after appending i close the file & then reopen the next time.

Now, i am unable to access any files in the NAND.When i read the directory, the files can be seen, but when i try to open it, the system hangs.infact, the debugger that i am using also hangs[ULINK2] & i have to reset it as well.

I have read somewhere that it is not a good practice to append small data to files again & again..

Please guide..!

Parents
  • Hello Punit,

    If fopen() hangs, it may be because the max # of open files has been reached, and the function waits for a mutex that can never be given. I think this situation was improved with an error message later in the newer File System Component. Try increasing max # of open files in "File_Config.c".

    RTX's configuration file also specifies the number of mutexes in OS_MUTEXCNT. It may also be increased, to allow more mutexes for the arm standard runtime library that will be used underneath fopen().

    What you are worrying about is called data fragmentation. With EFS, we had the defrag() function, but with a FAT(32?) file system on NAND flash, you don't have that option.

    Overall, it may be helpful to periodically copy smaller log files into larger ones, then delete the smaller log files. This is an immediate performance penalty for improved performance in the future. Have you tried increasing the number of cached pages?

    Thanks,
    Zack

Reply
  • Hello Punit,

    If fopen() hangs, it may be because the max # of open files has been reached, and the function waits for a mutex that can never be given. I think this situation was improved with an error message later in the newer File System Component. Try increasing max # of open files in "File_Config.c".

    RTX's configuration file also specifies the number of mutexes in OS_MUTEXCNT. It may also be increased, to allow more mutexes for the arm standard runtime library that will be used underneath fopen().

    What you are worrying about is called data fragmentation. With EFS, we had the defrag() function, but with a FAT(32?) file system on NAND flash, you don't have that option.

    Overall, it may be helpful to periodically copy smaller log files into larger ones, then delete the smaller log files. This is an immediate performance penalty for improved performance in the future. Have you tried increasing the number of cached pages?

    Thanks,
    Zack

Children