cancel
Showing results for 
Search instead for 
Did you mean: 

Is This Safe !! DMA??

JHERI
Senior

Hello all

 

I am interfacing various peripherals on the STM42F446RE, SPI, I2C, UART etc,  and in the process i'm choosing to use the DMA controller.

when configuring various 3rd party ICs some may have many registers to setup,

 

Rather than use global array variables eating up resorces of the ARM, is it safe to use local variables within the peripherals DMA setup when calling HAL_SPI_DMA functions ??

 

void setup_spi (void)

{

#define array 24

uint8_t    spi_tx[array] = { 10, 20, 30, 40, 50, 60, 70 };

 

 HAL_SPI_Transmit_DMA( &hspi1, spi_tx, array );

 

}

 

my concern with the above is..., does the data get lost when exiting the function before it is written to the DMA ??

 

is this ok to do this ??? or should I use global variables when writing to the DMA

 

Thank in advance for any info

 

 

 

 

 

 

 

 

 

 

 

2 REPLIES 2
Techn
Senior II

As you rightly suspected, it's prone to  failure at some point in time, since its local variable.  In case your RAM is fully utilised,  you can keep couple of fixed buffers and switch them as you do the coding for different purposes.  It all depends on your logic design. 

If you allow the context to collapse it's not going to be safe/usable.

If this is a constant pattern use FLASH, and DMA out of that.

If the routine doesn't re-enter you can define the array as static within the function/scope and it will make it global. This is safer, and you can't have multiple DMA transactions in-flight any way.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..