【问题标题】:build error on Keil uVision5 compiling FreeRTOS v8.1.2 with cmsis在使用 cmsis 编译 FreeRTOS v8.1.2 的 Keil uVision5 上构建错误
【发布时间】:2016-09-07 06:18:28
【问题描述】:

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

我得到这个错误: ..\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F\portmacro.h(221): 错误:#18: 应为“)”

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

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

【问题讨论】:

  • “我在任何地方都找不到 ulNewBASEPRI。” - 模破坏格式,它被声明为局部变量...无论哪种方式,这是一些 GCC 特定的语法和功能,所以用非GCC编译它意味着重写它。 FreeRTOS 声称直接支持 Keil 工具,那为什么还要乱用 GCC 版本的源代码呢?

标签: gcc arm stm32 keil freertos


【解决方案1】:

使用 Keil,您应该使用来自 FreeRTOS\Source\portable\RVDS\ARM_CM4F\ 的适当文件

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

static portFORCE_INLINE void vPortRaiseBASEPRI( void )
{
    uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
    __asm
    {
        msr basepri, ulNewBASEPRI
        dsb
        isb
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2020-09-14
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多