Hi, I'm using CMSIS DSP Libraries with a microcontroller STM32F4 to compute FFT. Here is my function code to compute the FFT: void fftProcess(float32_t *parSignalInput_f32, float32_t *parfftOutput_f32) { uint16_t i = 0, n = 0;
for (i=0; i<2048; i++) { hamming_signal_real_img_f32[2*i] = 0;//*(parSignalInput_f32+i); hamming_signal_real_img_f32[2*i+1] = 0; }
// // Calculate RFFT on samples // arm_cfft_f32(&arm_cfft_sR_f32_len2048, hamming_signal_real_img_f32, INVERT_FFT, BIT_ORDER_FFT);
// // Calculate complex power of FFT results // arm_cmplx_mag_f32(hamming_signal_real_img_f32, g_fFFTResult_f32, NUM_SAMPLES);
for(i=0; i< (NUM_SAMPLES/2); i++) { *(parfftOutput_f32 + i) = g_fFFTResult_f32[i]; }
} I'm wondering why the next variables: parfftOutput_f32, parSignalInput_f32, g_fFFTResult_f32, hamming_signal_real_img_f32 must be defined as global variables. If there are not, my program goes in the hardfault handler. Thanks for your answer, PH
I can understand that global variables have to used for these functions because DMA is perhaps used during their execution. You should not be able to understand that, because that reasoning is incorrect. DMA has nothing to do with whether a variable is global or not. DMA may pose restrictions on a variable's storage duration, alignment, or even which memory space it's in. But certainly not on its global visibility (a.k.a. "linkage").