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'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

Things using DMA you might want to be very careful about the memory regions and alignments used, and the temporal nature of the stack with respect to the life of the DMA operation.

Cross-Posted on Keil