2

我正在使用带有 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 闪烁时间。

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

4

1 回答 1

4

RTOS 滴答由定时器中断生成。计时器设置(不正确),无论您设置什么 configTICK_RATE_HZ,它总是会导致 400kHz 的固定滴答声。由于闪烁率是在 RTOS 滴答率由 configTICK_RATE_HZ (portTICK_RATE_MS = 1000/configTICK_RATE_HZ) 正确表示的假设下设置的,因此出现了问题。

于 2010-02-15T02:55:31.887 回答