【发布时间】: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