2016-05-11 26 views
0

Ich benutze Keil uvision5, um cmsis_os.c (Wrapper für mein FreeRTOS) zu kompilieren.Erstellungsfehler auf Keil uVision5 kompilieren FreeRTOS v8.1.2 mit cmsis

Ich erhalte diese diesen Fehler: .. \ Middlewares \ third_party \ FreeRTOS \ Source \ portable \ GCC \ ARM_CM4F \ portmacro.h (221): Fehler: # 18: expected a ")"

portmacro .h hat das:

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 ist STM32F417VG. FreeRTOS Quellcode ist V8.1.2

Wir haben gcc-basierten Quellcode für unsere ARM, die ich auf Keil IDE portieren muss. Ich habe ST CubeMx verwendet, um ein reines Keil-Projekt zu generieren. Dann fügte ich v8.1.2 FreeRTOS Quellcode, einschließlich cmsis_os.c und cmsis_os.h weil Keil CMSIS RTOS-Wrapper für Debugger usw.

+0

_ „ich kann nicht ulNewBASEPRI überall finden kann.“ _ - Modulo gebrochen Formatierung, ist es genau dort erklärt, wie eine lokale Variable ... so oder so, das ist einig GCC-spezifische Syntax und Funktionalität, so Kompilieren es mit nicht-GCC wird bedeuten, es neu zu schreiben. FreeRTOS behauptet, die Keil-Tools direkt zu unterstützen. Warum müssen Sie sich also trotzdem mit der GCC-Version der Quellen herumschlagen? – Notlikethat

Antwort

0

Mit Keil muss, sollten Sie entsprechende Dateien aus FreeRTOS\Source\portable\RVDS\ARM_CM4F\

Diese Funktion sollte in Keil Syntax sieht aus wie

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