mpu_wrappers.h seems to be missing #define statements for several of the MPU wrapper functions which are defined in mpu_wrappers.c. The most notable of these are MPU_pvPortMalloc and MPU_vPortFree.
The net effect of this is that MPU_pvPortMalloc and MPU_vPortFree are defined but no prototype is available to MPU-enabled code – calling pvPortMalloc() results in the “privileged” pvPortMalloc() being called. If this is called from a “normal” task, there will be a memory protection error. I was expecting that the MPU shim in mpu_wrappers.c would be called, until I noticed the define was missing.
Long and short of it: you can’t allocate and free memory from MPU-enabled code.
Adding these calls to mpu_wrappers.h is fairly simple – is there any adverse implication of doing so which I may have overlooked?