C FreeRTOS配置滴答声频率

C FreeRTOS配置滴答声频率,c,msp430,rtos,iar,freertos,C,Msp430,Rtos,Iar,Freertos,我使用的是5.4版FreeRTOS的MSP430f5438 我有一个有趣的问题,我想不出来 基本上,当我将configTICK_RATE_HZ设置为不同的值时,LED的闪烁速度会更快或更慢;应该保持不变。我设置的configTICK_RATE_HZ越高,闪烁速度越慢,设置的TICK_RATE越低,闪烁速度越快 vTaskDelayUntil(&xLastFlashTime,xFlashRate);无论configTICK\u RATE\u HZ是什么,LED都应该每秒只闪烁一次。我走了过去,检查

我使用的是5.4版FreeRTOS的MSP430f5438

我有一个有趣的问题,我想不出来

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

vTaskDelayUntil(&xLastFlashTime,xFlashRate);无论configTICK\u RATE\u HZ是什么,LED都应该每秒只闪烁一次。我走了过去,检查了xFlashRate以确保。其始终=配置滴答频率。 代码:

当我将configtick_rate_hz设置为1000时,led闪烁的周期大于1秒;当我将tick rate设置为小于200时,led闪烁的周期远小于1秒

configTICK_RATE_HZ不应影响LED闪烁时间


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

RTOS滴答声是由计时器中断生成的。计时器的设置(不正确)使其始终在400kHz处产生固定的滴答声,无论您设置的配置滴答声频率为多少。由于闪烁率是在假设RTOS滴答率由configTICK\u rate\u HZ(portTICK\u rate\u MS=1000/configTICK\u rate\u HZ)正确表示的情况下设置的,因此出现了问题。

我认为您需要澄清。您的测试是指configTICK\u RATE\u HZ,但您的代码是指configTICK\u RATE\u MS,并且您还没有为ledFLASH\u RATE\u BASE提供值。单词RATE表示频率,MS表示周期。是哪一个?数值是多少。当你改变滴答声频率时,你的系统的频率会发生变化,为什么你会感到惊讶?@mocj:他很惊讶,因为他相信他计算了延迟来补偿滴答声频率的变化。他没有。澄清-1)xFlashRate是要延迟的RTO滴答数。2) ledFLASH_RATE_BASE是您想要的毫秒周期。3)portTICK_RATE_ms是RTOS刻度周期。它源自configTick\u RATE\u HZ(1000/configTick\u RATE\u HZ)。4) 因此:如果您希望led每秒(1000ms)滴答一次,RTOS每250ms滴答一次,那么您希望延迟为4个RTOS滴答一次。为什么您不通过编辑帖子而不是通过评论来澄清?为什么不正确?使用sysTick以外的计时器的意义在于,即使CPU时钟停止,它也会以相同的速率运行。
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.
}