2020-04-12 12:04 PM
Hello, i have a problem to build in PIL mode PMSM_FOC example. The problem is in the use of CRL: "ARM CMSIS SIN CON". After has manually add of the arm_math.h directory (C:\MATLAB\STM32-MAT\STM32\CRL\CMSIS_SIN_COS_CRL\FastMathFunctions) in the include paths (-l) the building process returns the following error code for 100 elements.
Building file: C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/PMSM_FOC_Compute/Src/arm_cos_f32.c
Invoking: MCU GCC Compiler
C:\MATLAB\STM32-MAT\STM32\STM32demos\MotorControl\FOC\PMSM_FOC_Compute_PIL\SW4STM32\PMSM_FOC_Compute\Debug
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -DUSE_HAL_DRIVER -DARM_MATH_CM4 '-DMemUnit_T=uint8_T' '-DMEM_UNIT_BYTES=1' '-DRTIOSTREAM_TX_BUFFER_BYTE_SIZE=128' '-DRTIOSTREAM_RX_BUFFER_BYTE_SIZE=128' '-DCODER_ASSUMPTIONS_ENABLED=1' -DCODE_INSTRUMENTATION_ENABLED -DCA_CHECK_FLOATING_POINT_ENABLED -DCA_CHECK_LONG_LONG_ENABLED -DCA_CHECK_DAZ_ENABLED -DSTM32F429xx -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Inc" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/STM32F4xx_HAL_Driver/Inc" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Device/ST/STM32F4xx/Include" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Include" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/PMSM_FOC_Compute/Inc" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/slprj/stm32/PMSM_FOC_Compute" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/slprj/stm32/PMSM_FOC_Compute/coderassumptions" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/slprj/stm32/PMSM_FOC_Compute/pil" -I"C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/slprj/stm32/_sharedutils" -I"C:/MATLAB/STM32-MAT/STM32/addSrc/inc" -I"C:/MATLAB/STM32-MAT/STM32/pil/stm32SerialRtiostream" -I"C:/Program Files/MATLAB/R2019b/extern/include" -I"C:/Program Files/MATLAB/R2019b/extern/include/coder/connectivity/CodeInstrTgtAppSvc" -I"C:/Program Files/MATLAB/R2019b/extern/include/coder/connectivity/CoderAssumpTgtAppSvc" -I"C:/Program Files/MATLAB/R2019b/extern/include/coder/connectivity/XILTgtAppSvc" -I"C:/Program Files/MATLAB/R2019b/rtw/c/ert" -I"C:/Program Files/MATLAB/R2019b/rtw/c/src" -I"C:/Program Files/MATLAB/R2019b/rtw/c/src/ext_mode/common" -I"C:/Program Files/MATLAB/R2019b/simulink/include" -I"C:/Program Files/MATLAB/R2019b/toolbox/coder/rtiostream/src" -I"C:/Program Files/MATLAB/R2019b/toolbox/coder/rtiostream/src/utils" -I"C:/Program Files/MATLAB/R2019b/toolbox/rtw/targets/pil/c" -I"C:/MATLAB/STM32-MAT/STM32/CRL/CMSIS_SIN_COS_CRL/FastMathFunctions" -Og -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fmessage-length=0 -MMD -MP -MF"MATLAB/arm_cos_f32.d" -MT"MATLAB/arm_cos_f32.o" -o "MATLAB/arm_cos_f32.o" "C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/PMSM_FOC_Compute/Src/arm_cos_f32.c"
In file included from C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:141:0,
from C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/PMSM_FOC_Compute/Inc/STM32_Config.h:40,
from C:/MATLAB/STM32-MAT/STM32/CRL/CMSIS_SIN_COS_CRL/FastMathFunctions/arm_math.h:256,
from C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/PMSM_FOC_Compute/Src/arm_cos_f32.c:30:
C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h:188:3: error: unknown type name '__IO'
__IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */
^~~~
C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h:188:17: error: expected ':', ',', ';', '}' or '__attribute__' before 'SR'
__IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */
Someone can help me? I've tried to add arm_cm4.h and stm32f429xx.h ditectories and i have the same error.
Solved! Go to Solution.
2020-04-13 07:21 PM
Ideally, best practice is to not modify standard files, e.g. "core_cm4.h", "stm32f429xx.h", "stm32f4xx.h", "arm_math.h".
But it appears your example software is low quality.
>I thought I'd pass the chip references before the arm_mat.h definitions and added a #include "stm32f429xx.h" inside the header,
I'm guessing your fix is by modifying "arm_math.h".
Yes, you're needing to include "stm32f429xx.h" without __CMSIS_GENERIC defined.
For reference there's a standard "arm_math.h" at https://github.com/ARM-software/CMSIS/blob/master/CMSIS/Include/arm_math.h.
In light of the trouble already caused, whatever modification you've made in "arm_math.h", if it works, that's fine.
2020-04-14 01:44 AM
Alister i have compare the teo arm_math.h and my (provided by stm32mat/target) is soo different from your linked.
I've try to put the include inside the main or in the foc_compute files (in the last one are invoked the sin and cos functions) but in this cases the issues come back :(
2020-04-14 01:14 PM
>Now the program compiles and the PIL is run with simulink.
It's an example project.
If its proof of concept, then works is good enough.
>I've try to put the include inside the main or in the foc_compute files <snip> but in this cases the issues come back
I've not used "arm_math.h". My guess is the situation of arm_math.h and __CMSIS_GENERIC arise from its expectation the math code would be separated from the hardware. Can you organise your app so your "math" modules that include "arm_math.h" don't include "stm32f429xx.h"?
You might also find some answers at https://community.st.com/s/question/0D50X0000At139a.
2020-04-14 03:47 PM
Yes is an example project provided from ST for Simulink, i stay learn how control a pmsm with embedded code, but all make by simulink.
No, i can't organize the code because is generated automatically, i can only organize by device (if i have understand well). I will try the tutorial at the end of the thread that you have linked. the only difference from my standard setup are the Build Variable and the library directory that are clean (but the library files are present in the project's files).
Infinite Thank you for your precious help!!!:smiling_face_with_smiling_eyes: