在使用cmsis编译FreeRTOS v8.1.2的Keil uVision5上构建错误

时间:2016-05-11 17:29:41

标签: gcc arm stm32 keil freertos

我使用Keil uvision5编译cmsis_os.c(我的FreeRTOS包装器)。

我得到这个错误: .. \ Middlewares \ Third_Party \ FreeRTOS \ Source \ portable \ GCC \ ARM_CM4F \ portmacro.h(221):错误:#18:预期a")"

portmacro.h有这个:

portFORCE_INLINE static void vPortRaiseBASEPRI( void )
{
    uint32_t ulNewBASEPRI;

    __asm volatile
    (
        "   mov %0, %1                                              \n" \
        "   msr basepri, %0                                         \n" \
        "   isb                                                     \n" \
        "   dsb                                                     \n" \
        :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )    <<<<<<<<<<< LINE WITH THE ERROR.
    );
}

ARM是STM32F417VG。 FreeRTOS源代码是V8.1.2

我们已经为ARM提供了基于gcc的源代码,我需要将其移植到Keil IDE上。 我用ST CubeMx生成了一个处女Keil项目。 然后,我添加了v8.1.2 FreeRTOS源代码,包括cmsis_os.c和cmsis_os.h,因为Keil需要cmsis RTOS包装器用于调试器等。

1 个答案:

答案 0 :(得分:0)

使用Keil,您应该使用static portFORCE_INLINE void vPortRaiseBASEPRI( void ) { uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY; __asm { msr basepri, ulNewBASEPRI dsb isb } }

中的相应文件

Keil语法中的这个函数看起来像

{{1}}