cancel
Showing results for 
Search instead for 
Did you mean: 

Race condition with f_mount()?

Lars Beiderbecke
Senior III

I'm using FatFs without RTOS, and quite often the f_mount() call will fail. Right now it always fails, but in a previous version of my code it failed only 20%. My current mount code (using HAL) looks like

  if (f_mount(&fatfs, "", 1))
    led_on_abort();

and my initialization before in main.c looks like

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_FMC_Init();
  MX_SDMMC1_SD_Init();
  MX_FATFS_Init();
  MX_RTC_Init();
  MX_NVIC_Init();

I did enable interrupts and DMA for SDMMC1. That's why those init calls are before f_mount().

Could there be a timing issue causing f_mount to fail? Note that changing the immediate parameter to 0 does not prevent the failure.

When I'm debugging, everything works just fine. That's why I think there could be some timing issue -- not enough time between SDMMC/FatFs-Init and f_mount, or between f_mount and f_open (when not immediate).

Any ideas?

1 ACCEPTED SOLUTION

Accepted Solutions
Lars Beiderbecke
Senior III

For the record, it was not a race condition. I entered a value of 100 ticks into the FatFs timeout, which was way too little. Setting the value to 10000 only makes f_mount() fail in 5%.

View solution in original post

1 REPLY 1
Lars Beiderbecke
Senior III

For the record, it was not a race condition. I entered a value of 100 ticks into the FatFs timeout, which was way too little. Setting the value to 10000 only makes f_mount() fail in 5%.