Hi Tomek,

I can barely tell the difference in performance. I am fully utilizing the
SDIO and USB stuff, pushing them to their limits. I think it might be a few
milliseconds slower, but there are so many variables that it could be
caused by anything. I am honestly more happy that it works right now.

I'm not sure if the constant should be configurable. Maybe it is constant
for a reason.

Extra info in Kconfig can help, but not when the problem appears later when
the program becomes bigger. That's where a syslog warning or something
could come in handy. Or debug assert even?

Op vr 25 jul 2025 om 16:45 schreef Tomek CEDRO <to...@cedro.info>:

> Hi Kevin, nice catch :-) Does that (disabling DMA) has impact on
> efficiency? Maybe this variable should be kconfig configurable with
> detailed explanation on what it does? :-)
>
> --
> CeDeROM, SQ7MHZ, http://www.tomek.cedro.info
>
> On Fri, Jul 25, 2025, 16:31 Kevin Witteveen <kevinwit1...@gmail.com>
> wrote:
>
> > Hi NuttX,
> >
> > *Days of debugging, out of memory problems when opening files.*
> > Last couple days I've struggled with an annoying problem where opening
> > files were throwing out-of-memory errors even when I have way more than
> > enough memory left.
> >
> > After changing the config, changing code and uploading atleast 100 times,
> > trying new things, I have discovered that I could specifically only open
> 8
> > files before the ENOMEM error.
> >
> > So I started digging and found out that a couple boards such as
> > STMF429ZI have a source file called {arch here}_dma_alloc.c with a
> #define
> > called "BOARD_DMA_ALLOC_POOL_SIZE".
> > This is a constant set to 8 * 512.
> > Interesting... This is used for the granule allocator and is enabled by
> > configuring CONFIG_GRAN and CONFIG_FAT_DMAMEMORY.
> >
> > After disabling these, it worked. I can make many files now without
> errors.
> >
> > *TLDR*
> > opening multiple files returns *unexplained* -ENOMEM (out of memory) when
> > there is plenty of memory left.
> > Caused by constant CONFIG_FAT_DMAMEMORY (8*512) in multiple board's
> > {arch}_dma_alloc.c granular allocator.
> > Fixed by disabling CONFIG_FAT_DMAMEMORY
> >
> > *My hardware*
> > STM32H743 custom board
> > SD card with 4 wide SDIO
> > USB MSC master
> >
> >
> > *Solution?*I'm sure there is a brilliant reason why
> > BOARD_DMA_ALLOC_POOL_SIZE is specifically set to 8*512, but I think it is
> > very important to document this.
> > Another great addition would be to throw a specific error message when
> this
> > out of memory problem happens. Something hinting towards
> > BOARD_DMA_ALLOC_POOL_SIZE, FAT_DMAMEMORY or similar.
> >
> > What do we think?
> >
> > Best,
> >
> > Kevin (Keever50 or Martinimarter at github)
> >
>

Reply via email to