I’ve wrapped up all my adl_flhWrite() calls inside a Queue and a Timer process. My FlashWrite() pushes the data to a adlQueue, and a timer runs every 50mS - it checks the top of the queue and does the flhWrite() if there’s any data in the queue. Worst case is that it takes 50mS per block of data (so in your case it would take 150mS to write your three blocks). I haven’t had this process trip the watchdog - although I’m only using the flash for configuration data that is changing slowly so I may not have hit the GC either.
Note that the flash endurance is estimated at 100,000 erase/write cycles - so you need to manage the amount of data you are writing.
On the watchdog - I’ve had intermittent issues with some function calls (the A&D flash and WIP among others). It appears that most of the time the operations are fine, but occasionally (randomly?) I’ve called the same code and come out with a watchdog exception. The only thing I can put it down to is that on the occasions that the watchdog exceptions occur, I’ve been unlucky to call my code when the watchdog is nearing the end of it’s counting period and my code trips.
There are some watchdog manipulation functions, and I’ve ended up wrapping some adl functions with my own code that explicitly resets the watchdog before calling the problematic adl functions.