FreeRTOS configTICK_RATE_HZ
Domanda
Se si utilizza una MSP430f5438 con la versione 5.4 di FreeRTOS.
Sto avendo un problema strano che io non riesco a capire.
In sostanza, quando ho impostato configTICK_RATE_HZ a valori diversi, il LED lampeggia velocemente o più lentamente; esso dovrebbe rimanere lo stesso tasso. Lampeggia più lenta è la più alta ho impostato configTICK_RATE_HZ, e più velocemente quando ho impostato TICK_RATE inferiore.
vTaskDelayUntil (& xLastFlashTime, xFlashRate); è tale che il LED dovrebbe solo lampeggia una volta al secondo non importa quale sia il configTICK_RATE_HZ è. Ho fatto un passo attraverso e controllato il xFlashRate per assicurarsi. Il suo = sempre al configTICK_RATE_HZ. Codice:
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.
}
Il lampeggio led con un periodo superiore a 1 secondo quando ho impostato il configtick_rate_hz a 1000 e il led lampeggia con un periodo molto meno che 1s quando ho impostato il tasso di spunta a qualcosa di meno di ~ 200
configTICK_RATE_HZ non dovrebbe pregiudicare la blinktime LED.
Mi rendo conto che è necessaria più informazioni e prontamente fornire qualunque frammenti di codice sono necessari per aiutare.
Soluzione
La zecca RTOS è generato da un interrupt timer. Il timer è stato impostato (impropriamente) in modo tale che sempre causato un segno di spunta fissato a 400 kHz non importa ciò che si imposta configTICK_RATE_HZ troppo. Poiché la velocità di intermittenza è impostato in base al presupposto che il tasso tick RTOS è correttamente rappresentato dalla configTICK_RATE_HZ (portTICK_RATE_MS = 1000 / configTICK_RATE_HZ), problemi derivano.