FreeRTOS+FAT cache memory

sachingole wrote on Wednesday, June 07, 2017:

Hi All,

Any help in understanding size of cache memory which is used in below structure.

FF_IOManager_t *FF_CreateIOManger( FF_CreationParameters_t *pxParameters, FF_Error_t *pxError );

This FF_IOManager_t object has variable ulMemorySize, whose description says that it shoud in mutiple of sector size.

/* The size of the cache memory. ulMemorySize is specified in bytes and must
be a multiple of ulSectorSize. */
uint32_t ulMemorySize;

I have STM32476-RG Nucleo board with 128 KB RAM, In which I have created 25KB ramdisk so I would to cache memory size as minimum as possible.

What is recommended size for cache memory size ?
What shoud be criteria to decide apropriate size ?

Best regards,
Sachin

heinbali01 wrote on Thursday, June 08, 2017:

HI Sachin, I just measured the actual use of the +FAT internal cache buffers.

In a test I sent and received 25 files using 3 FTP threads.

When copying to and from an SD-card, I used large (5MB) files, so 3 files were written and read simultaneously.

The result is surprising: in all cases, at most 9 buffers were used:

RAM-disk: Buffers 9 / 15
SD-Card : Buffers 9 / 128

So I would provide at least 9 x 512 ( =4608 ) bytes as caching memory. Later on, have a try with less if you like.

Note that in most cases, the internal caches are by-passed: FF_Write() and FF_Read() are optimised so that user-buffers are passed directly to the drivers.

What is recommended size for cache memory size ?

9 x 512 bytes

What should be criteria to decide appropriate size ?

Look at how many files are open at the same time and how many tasks are accessing the same volumes (RAM-disk, SD-card). It should not get locked-up; task waiting for ither tasks.

There is a time-out when waiting for a free cache buffer: grep for FF_GETBUFFER_WAIT_TIME_MS, by default 20 seconds.

Regards.

sachingole wrote on Thursday, June 08, 2017:

Thank you for deterministic reply.

In my case I will be using 1 file at a time, at most I will be working on 2 files only. So I am setting

define mainIO_MANAGER_CACHE_SIZE ( 5UL * mainRAM_DISK_SECTOR_SIZE )

Best regards,
Sachin