I'm trying to optimize a footprint and reduce size of Ram disk, but get error if I define it smaller than 3 mb.
Image contains backtrace, place where it fails and some local variables.
I'd appreciate any idea.
FAT imposes some minimum volume sizes. For example see the following
The minimum size for FAT12 is smaller.
How can I force it to use FAT12?
FF_Format() routine does not (yet) support FAT12, only FAT16 and FAT32.
Two parameters indicate your preference:
xPreferFAT16: try to use FAT16, if not possible, try FAT32
xSmallClusters: try small clusters first, if not possibly, try larger clusters.
Larger clusters are more efficient in terms of speed, small clusters have less waste of space.
Microsoft states that:
if( CountofClusters < 4085 )
/* Volume is FAT12 /
else if( CountofClusters < 65525 )
/ Volume is FAT16 /
/ Volume is FAT32 */
+FAT is following Microsoft's guidelines to get a maximum compatibility. However, you are not going to exchange your RAM disk with another system.
You could try the following in
#define MIN_CLUSTERS_FAT16 ffconfigMIN_CLUSTERS_FAT16
#define MIN_CLUSTERS_FAT16 ( 4085 + 1 )
ffconfigMIN_CLUSTERS_FAT16 in your
FreeRTOSFATConfig.h with a smaller value of e.g. :
#define ffconfigMINCLUSTERSFAT16 1800
Just tested in the WIN32 demo project and it works as expected.
A 2MB RAM-disk will get 4023 clusters, a 1MB disk gets1991 clusters. In these cases, each cluster will contain a single sector of 512 bytes.