ошибка сборки на Keil uVision5 при компиляции FreeRTOS v8.1.2 с помощью cmsis

Я использую 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.
    );
}

АРМ это STM32F417VG. Исходный код FreeRTOS — V8.1.2.

У нас есть существующий исходный код на основе gcc для нашего ARM, который мне нужно перенести в Keil IDE. Я использовал ST CubeMx для создания нового проекта Keil. Затем я добавил исходный код FreeRTOS версии 8.1.2, включая cmsis_os.c и cmsis_os.h, поскольку Keil нуждается в оболочке cmsis RTOS для отладчика и т. д.


person Doug Null    schedule 11.05.2016    source источник
comment
Я нигде не могу найти ulNewBASEPRI. - форматирование по модулю нарушено, оно объявлено тут же как локальная переменная... В любом случае, это какой-то специфичный для GCC синтаксис и функциональность, так что компиляция с не-GCC идет значит переписать. FreeRTOS утверждает, что поддерживает инструменты Keil напрямую, так зачем вам в любом случае возиться с версией исходников GCC?   -  person Notlikethat    schedule 11.05.2016


Ответы (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
    }
}
person Alexey Esaulenko    schedule 17.05.2016