PID with SIMD Intrinsics on CM4 and CM7 with hard FPU
This is perhaps more a CMSIS question
I am trying to build a PID application on STM32F4
CMSIS DSP version: V1.4.5 b
I included the 'libarm_cortexM4lf_math' for GCC, included 'arm_math.h'.
I enabled compile time flag ARM_MATH_CM4
I will be calling init, reset and process from my application code.
However, I was not able to build PID for Q15 type because of inability for find __SMUAD and other SIMD intrinsics
I &sharpif0 ed the
static
__INLINE q15_t arm_pid_q15I could compile the q31 and f32 methods. However, methods for 32-bit types do not actually use SIMD intrinsics, which makes me doubt if there is any CMSIS DSP value-add for them... Does anybody have an experience with PID on M4 or M7?
for e.g.
static
__INLINE q31_t arm_pid_q31(
arm_pid_instance_q31 * S,
q31_t in)
{
q63_t acc;
q31_t out;
/* acc = A0 * x[n]
*/
acc = (q63_t) S->A0 * in;
/* acc += A1 * x[n-1] */
acc += (q63_t) S->A1 * S->state[0];
/* acc += A2 * x[n-2]
*/
acc += (q63_t) S->A2 * S->state[1];
/* convert output to 1.31 format to add y[n-1] */
out = (q31_t) (acc >> 31u);
/* out += y[n-1] */
out += S->state[2];
/* Update state */
S->state[1] = S->state[0];
S->state[0] = in;
S->state[2] = out;
/* return to application */
return
(out);
}#pid #cmsis #m4-fpu #cmsis-dsp
