I was stepping through the vector_ex1_max_q15 example to try and understand how the stack of the LEA is used.
In the msp_sinusoid_q15() function prior to the the following allocations LEACNF2 (LEA stack pointer value) was 0x00000F00:
/* Allocate coefficients in LEA memory and set parameters */ df1Params.length = params->length; df1Params.coeffs = (msp_biquad_df1_q15_coeffs *)msp_lea_allocMemory(sizeof(msp_biquad_df1_q15_coeffs)/sizeof(uint32_t)); df1Params.states = (msp_biquad_df1_q15_states *)msp_lea_allocMemory(sizeof(msp_biquad_df1_q15_coeffs)/sizeof(uint32_t));
At the end of the msp_sinusoid_q15() function after execution of the following LEACNF2 was 0x00000EFF (i.e. not the same as the initial value prior to the allocations):
/* Free coefficients and states from LEA memory */ msp_lea_freeMemory(sizeof(msp_biquad_df1_q15_coeffs)/sizeof(uint32_t)); msp_lea_freeMemory(sizeof(msp_biquad_df1_q15_states)/sizeof(uint32_t));
I.e. the msp_sinusoid_q15() function seems to cause a "memory leak" on the LEA stack.
I think there is a typo on the following memory allocation:
df1Params.states = (msp_biquad_df1_q15_states *)msp_lea_allocMemory(sizeof(msp_biquad_df1_q15_coeffs)/sizeof(uint32_t));
Where the sizeof(msp_biquad_df1_q15_coeffs) should be sizeof(msp_biquad_df1_q15_states):
df1Params.states = (msp_biquad_df1_q15_states *)msp_lea_allocMemory(sizeof(msp_biquad_df1_q15_states)/sizeof(uint32_t));