FreeRTOS with STM32H7ZI with STM32CUBE

Hi there,
I’m trying to compile a project using the STM32H743ZI2 Nucleo board with STM32CUBE Framework with FreeRTOS.

edit: The fix was that in my platform.ini file instead of:
extra_scripts = add_hardfloat.py
I did
extra_scripts = pre:add_hardfloat.py

The project can be found here:
Zafeer_FreeRTOSFromGroundUp/PlatformIO/17_WorkingWithQueueSets at main · ZafeerAbbasi/Zafeer_FreeRTOSFromGroundUp (github.com)

But basically, I’m using an extra script to add flags:

Import( “env” )

flags = [
“-mfloat-abi=hard”,
“-mfpu=fpv5-d16”,
“-mthumb”,
“-u _printf_float”,
“-mcpu=cortex-m7”,
“-DDEBUG -c -x assembler-with-cpp --specs=nano.specs”
]
env.Append(CCFLAGS=flags, LINKFLAGS=flags, ASFLAGS=flags)

However I keep getting the following errors:

…\Local\Temp\ccTwSuW0.s: Assembler messages:
…\Local\Temp\ccTwSuW0.s:330: Error: selected processor does not support vstmdbeq r0!,{s16-s31}' in Thumb mode ...\Local\Temp\ccTwSuW0.s:332: Error: instruction not allowed in IT block -- stmdb r0!,{r4-r11,r14}’
…\Local\Temp\ccTwSuW0.s:352: Error: selected processor does not support vldmiaeq r0!,{s16-s31}' in Thumb mode ...\Local\Temp\ccTwSuW0.s:354: Error: instruction not allowed in IT block -- msr psp,r0’
*** [.pio\build\nucleo_h743zi\libe54\Source\portable\GCC\ARM_CM4F\port.o] Error 1

The exact instructions can be found in port.c of FreeRTOS Kernel:

void xPortPendSVHandler( void )
{
/* This is a naked function. */

__asm volatile
(
"   mrs r0, psp                         \n"
"   isb                                 \n"
"                                       \n"
"   ldr r3, pxCurrentTCBConst           \n" /* Get the location of the current TCB. */
"   ldr r2, [r3]                        \n"
"                                       \n"
"   tst r14, #0x10                      \n" /* Is the task using the FPU context?  If so, push high vfp registers. */
"   it eq                               \n"
"   vstmdbeq r0!, {s16-s31}             \n"
"                                       \n"
"   stmdb r0!, {r4-r11, r14}            \n" /* Save the core registers. */
"   str r0, [r2]                        \n" /* Save the new top of stack into the first member of the TCB. */
"                                       \n"
"   stmdb sp!, {r0, r3}                 \n"
"   mov r0, %0                          \n"
"   msr basepri, r0                     \n"
"   dsb                                 \n"
"   isb                                 \n"
"   bl vTaskSwitchContext               \n"
"   mov r0, #0                          \n"
"   msr basepri, r0                     \n"
"   ldmia sp!, {r0, r3}                 \n"
"                                       \n"
"   ldr r1, [r3]                        \n" /* The first item in pxCurrentTCB is the task top of stack. */
"   ldr r0, [r1]                        \n"
"                                       \n"
"   ldmia r0!, {r4-r11, r14}            \n" /* Pop the core registers. */
"                                       \n"
"   tst r14, #0x10                      \n" /* Is the task using the FPU context?  If so, pop the high vfp registers too. */
"   it eq                               \n"
"   vldmiaeq r0!, {s16-s31}             \n"
"                                       \n"
"   msr psp, r0                         \n"
"   isb                                 \n"
"                                       \n"
#ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata workaround. */
    #if WORKAROUND_PMU_CM001 == 1
"           push { r14 }                \n"
"           pop { pc }                  \n"
    #endif
#endif
"                                       \n"
"   bx r14                              \n"
"                                       \n"
"   .align 4                            \n"
"pxCurrentTCBConst: .word pxCurrentTCB  \n"
::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
);

}

After some more digging, it seems that the startup file produced by STM32CUBEMX works but the startup file which is automatically generated by PlatformIO does not work. So I guess now I will try to find out how to add custom startup files with PlatformIO

I’m not too experienced but any help would be greatly appreciated!