uBlaze: Cannot make ram disk smaller than 3 mb

rasty1 wrote on Monday, July 25, 2016:

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.


rasty1 wrote on Monday, July 25, 2016:

Backtrace and variables

rtel wrote on Monday, July 25, 2016:

FAT imposes some minimum volume sizes. For example see the following
thread: http://superuser.com/questions/74392/minimum-volume-size-for-fat16

The minimum size for FAT12 is smaller.

rasty1 wrote on Monday, July 25, 2016:

How can I force it to use FAT12?

heinbali01 wrote on Monday, July 25, 2016:

Unfortunately, the 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 ff_format.c :

#ifdef ffconfigMIN_CLUSTERS_FAT16
    #define MIN_CLUSTERS_FAT16    ffconfigMIN_CLUSTERS_FAT16
    #define MIN_CLUSTERS_FAT16    ( 4085 + 1 )

And define ffconfigMIN_CLUSTERS_FAT16 in your FreeRTOSFATConfig.h with a smaller value of e.g. :

    #define ffconfigMIN_CLUSTERS_FAT16   1800


heinbali01 wrote on Monday, July 25, 2016:

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.