Skip to main content
toniospritz
Associate III
April 12, 2020
Solved

Issues build simulink project with CRL "ARM CMSIS SIN COS" and SW4STM32. Error: unknown type name ‘__IO’

  • April 12, 2020
  • 2 replies
  • 5715 views

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.

This topic has been closed for replies.
Best answer by alister

>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.

2 replies

alister
Senior III
April 13, 2020

>the building process returns the following error code

__IO is defined in Drivers\CMSIS\Include\core_<your-core>.h.

stm32f4xx.h should include stm32f429xx.h, should include core_cm4.h.

Either stm32f429xx.h has been modified or the FW package is broken.

toniospritz
Associate III
April 13, 2020

thanks Alister for you answer.

I've check the stmf4xx.h header and is present in the include path (../../../Drivers/CMSIS/Device/ST/STM32F4xx/Include) and the directory is for stm429xx.h that use the defined "__IO".

The core_cm4.h instead is present in 2 directory and the files match. the directories are

(C:\MATLAB\STM32-MAT\STM32\STM32demos\MotorControl\FOC\PMSM_FOC_Compute_PIL\Drivers\CMSIS\Include)

and

(C:\MATLAB\STM32-MAT\STM32\STM32demos\MotorControl\FOC\PMSM_FOC_Compute_PIL\Drivers\CMSIS\Core\Include)

I've add manually ....core\include directory to the paths of the toolchain, but i've del same errors in the build process. (cmsis\include and cmsis\core\include have inside the same files)

thak you for help

alister
Senior III
April 13, 2020

>and the directory is for stm429xx.h that use the defined "__IO".

You're confirming stm429xx.h includes "core_cm4.h"? Yes I know it does.

>I've add manually ....core\include directory to the paths

Your first post's console output shows "C:/MATLAB/STM32-MAT/STM32/STM32demos/MotorControl/FOC/PMSM_FOC_Compute_PIL/Drivers/CMSIS/Include" is already included, your second post says "core_cm4.h" is in that directory, and your first post's compiler output in the console output doesn't indicate "core_cm4.h" wasn't found. Is the attached stm429xx.h the same file as was used in the compile in your first post?

You've attached good stm429xx.h and core_cm4.h files. So the build problem is now resolved?

The following comments are only to assist improving the quality of the software project...

>The core_cm4.h instead is present in 2 directory and the files match

Ideally there'd be only one "Drivers/CMSIS/Include" directory.

I see in your first post's compiler output, all the include directories are absolute. Ideally they'd all be relative your build directory, which is "C:\MATLAB\STM32-MAT\STM32\STM32demos\MotorControl\FOC\PMSM_FOC_Compute_PIL\SW4STM32\PMSM_FOC_Compute\Debug". The advantage of relative paths is, you could version-control it and another developer, or yourself at some later time, could clone the repository anywhere and build it OK.

toniospritz
Associate III
April 13, 2020