FreeRTOS configTICK_RATE_HZ

我使用的是FreeRTOS版本5.4的MSP430f5438。

我有一个我无法弄清楚的有趣问题。

基本上,当我将configTICK_RATE_HZ设置为不同的值时,LED会更快或更慢地闪烁; 它应该保持相同的速度。 它设置的configTICK_RATE_HZ越高,闪烁越慢,当我将TICK_RATE设置得越低时,速度越快。

vTaskDelayUntil(&xLastFlashTime,xFlashRate); 无论configTICK_RATE_HZ是什么,LED都应该每秒闪烁一次。 我介入并检查了xFlashRate以确定。 它总是=到configTICK_RATE_HZ。 码:

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

当我将configtick_rate_hz设置为1000时,LED闪烁时间大于1秒,当我将滴答速率设置为小于〜200时,LED闪烁时间远小于1秒

configTICK_RATE_HZ不应影响LED闪烁时间。

我意识到需要更多信息,并且可以随时提供所需的任何代码片段来提供帮助。

RTOS滴答由定时器中断产生。 定时器设置(不正确),无论你设置configTICK_RATE_HZ是什么,它总是在400kHz引起一个固定的滴答声。 由于在假设RTOS滴答率由configTICK_RATE_HZ(portTICK_RATE_MS = 1000 / configTICK_RATE_HZ)正确表示的情况下设置闪烁率,因此出现了问题。