2016-07-17 3 views
-1

J'essaie d'intégrer freeRTOS à mon application qui s'exécute sur AT32UC3A0512. J'ai téléchargé un exemple de projet FreeRTOS pour EVK1100 (il soutient le AT32UC3A) et essayer d'inclure les fichiers sources du noyau, donc ma hiérarchie d'application ressemble à:Intégration de freeRTOS à un projet existant

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

principaux ressemble

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 
    } 
} 

maintenant par Cependant, si j'inclus le dossier freertos (aucune inclusion ni appel aux sources freertos n'est fait), l'interruption de la minuterie n'est pas déclenchée.

Il semble fou, mais je ne sais pas comment le comportement des sprintf a changé cette façon et aussi je ne vois pas la relation entre sprintf et le contrôleur d'interruption

Répondre

1

Le RTOS et votre application peuvent utiliser le même interruption de minuterie. Vérifiez le fichier RTOS port.c pour savoir quelle minuterie est utilisée pour la coche du minuteur. CHeck votre fonction d'interruption et la définition de la fonction d'interruption port.c.

+0

Merci pour les commentaires, en effet c'est la même minuterie appelée cependant, c'est à 'prvSetupTimerInterrupt' de configurer le timer freeRTOS et nous avons mentionné que je n'appelais aucune fonction de freeRTOS, alors comment cela peut-il causer des problèmes? – fedi

+0

Si je place la boucle while avant d'appeler 'sprintf' et d'interrompre le timer ISR, le timer interrompt le travail – fedi