2016-07-17 28 views
-1

Ich habe versucht, freeRTOS in meine Anwendung zu integrieren, die auf AT32UC3A0512 läuft. Ich habe ein freeRTOS Projektbeispiel für EVK1100 (es unterstützt die AT32UC3A) und versuchen Sie die Kernel-Quelldateien enthält, so dass meine Anwendungshierarchie wie folgt aussieht:Integration von freeRTOS in ein bestehendes Projekt

src 
|ASF 
|main.c 
|freertos 
    |freertos-7.0.0 
     |source 

Haupt sieht aus wie

int main() 
{ 
    char str[5]; 
    uint8_t num; 

    enable_Timer(); 
    enable_Timer_Interrupt(); 
    sprintf (str, %03d, num); 

    while(1) 
    { 
      // Wait the timer interrupt to happen 
    } 
} 

jetzt durch nur den Freertos-Ordner aus meinem Projekt ausgeschlossen, die Timer-Interrupt ausgelöst werden und alles funktioniert gut,

Allerdings, wenn ich den Freertos-Ordner (keine Aufnahme noch Aufruf an freertos Quellen ist getan) den Timer-Interrupt nicht ausgelöst werden.

Es scheint verrückt, aber ich weiß nicht, wie sich das Verhalten von sprintf diese Art und Weise verändert hat und ich die Beziehung zwischen sprintf und den Interrupt-Controller auch nicht

Antwort

1

Die RTOS und Ihre Anwendung finden könnte die Verwendung von Gleicher Timer-Interrupt. Überprüfen Sie die RTOS-Datei port.c, um herauszufinden, welcher Timer für den Timer-Tick verwendet wird. CHeck Ihre Interrupt-Funktion und Port.c Interrupt-Funktionsdefinition.

+0

Vielen Dank für die Rückmeldung, es ist in der Tat der gleiche Timer aufgerufen, es ist bis zu "prvSetupTimerInterrupt", um die freeRTOS-Timer einzurichten und uns erwähnte ich habe keine Funktion von freeRTOS aufgerufen, so wie könnte dies Probleme machen? – fedi

+0

Wenn ich die while-Schleife vor dem Aufruf von 'sprintf' platziere und den Timer ISR breakpoint, unterbricht der Timer die Arbeit – fedi