FreeRTOS configTICK_RATE_HZ
Question
J'utilise un MSP430f5438 avec la version 5.4 de FreeRTOS.
J'ai un problème drôle que je ne peux pas comprendre.
En principe, lorsque je me mis configTICK_RATE_HZ à des valeurs différentes, la LED clignote rapidement ou plus lentement; il devrait rester le même taux. Il clignote plus lent Plus je mis configTICK_RATE_HZ, et plus vite quand je mis bas TICK_RATE.
vTaskDelayUntil (& xLastFlashTime, xFlashRate); est telle que seule la LED doit clignoter une fois par seconde, peu importe ce que le configTICK_RATE_HZ est. J'ai vérifié et suivi pas à pas le xFlashRate pour vous assurer. Il est toujours à la = configTICK_RATE_HZ. Code:
xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms
xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals
/* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/
xLastFlashTime = xTaskGetTickCount();
for(;;) {
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED );
flashled();//this should happen every 1 second.
}
Le clignotement conduit avec une période supérieure à 1 seconde lorsque je mets le configtick_rate_hz à 1000 et le led clignote avec une période beaucoup moins que 1s quand je a fixé le taux de tiques à quoi que ce soit moins ~ 200
configTICK_RATE_HZ ne devrait pas affecter la blinktime LED.
Je me rends compte plus d'informations est nécessaire et fournirai facilement ce que des extraits de code sont nécessaires pour aider.
La solution
La tique RTOS est générée par une interruption de la minuterie. La minuterie a été réglée (mal) telle qu'elle a toujours provoqué une tique fixe à 400kHz, peu importe ce que vous définissez configTICK_RATE_HZ aussi. Étant donné que la fréquence de clignotement est réglé en supposant que le taux de tiques RTOS est correctement représentée par la configTICK_RATE_HZ (portTICK_RATE_MS = 1000 / configTICK_RATE_HZ), les problèmes se sont ensuivies.