I have a control algorithm which operates within a Timer Interrupt of 200 us. Basically my code generates an output and compares it to a look up table. When I have a single array defined:

**const float Adm_Re_array[720] = {...values...}**

And search for a match in the LUT which has the minimum distance from the array using this code:

** for (i=1;i<=8;i=i++)**** {**** k = act_element+i-4;**** if (k < 0) k = k + 720; **** if (k >(719)) k = k - 720; **

** dist_Re = Adm_Re-Adm_Re_array[k];**

** dist_T = (dist_Re*dist_Re);**

** if ((dist_T <= dist_T_min)||(dist_T_min == -1))**** {**** dist_T_min = dist_T;**** act_element = k;**

** }**** }**

My control algorithm works well and I have used only 124 us of the 200 us.

When I change from a single dimension to a multi-dimensional array of form:

**const float Adm_Re_array[7][720] = {...values...}**

And search for a match in the LUT which has the minimum distance from the array using this code:

**for (i=1;i<=8;i=i++)****{****k = act_element+i-4;****if (k < 0) k = k + 720; ****if (k >(719)) k = k - 720 **

**dist_Re = Adm_Re-Adm_Re_array[4][k];**

**dist_T = (dist_Re*dist_Re);**

**if ((dist_T <= dist_T_min)||(dist_T_min == -1))****{****dist_T_min = dist_T;****act_element = k;**

**}****}**

My control code goes unstable while the loop time does not change significantly from the 124 us as I am only looking at one row of the multidimensional array in my search. Are there any known issues with the STM32 using multidimensional arrays similar to what I am observing.

Regards,

K

You are not on a PC here, with virtually unlimited ressources.

Can you tell where this array is located (stack or global) ?

What exactly does this mean ?

One thing has nothing to do with the other.

Organizing memory for your variables is the sole responsibility of the compiler (toolchain).

BTW, I am pretty sure your algorithm could use integer types and scaled math instead of floating point.