2

FreeRTOSのバージョン5.4でMSP430f5438を使用しています。

私は理解できない面白い問題を抱えています。

基本的に、configTICK_RATE_HZを別の値に設定すると、LEDの点滅が速くなったり遅くなったりします。同じレートを維持する必要があります。configTICK_RATE_HZを高く設定すると点滅が遅くなり、TICK_RATEを低く設定すると点滅が速くなります。

vTaskDelayUntil(&xLastFlashTime、xFlashRate); configTICK_RATE_HZが何であっても、LEDは1秒に1回だけ点滅するようになっています。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に設定すると、1秒を超える周期でLEDが点滅し、ティックレートを200未満に設定すると、1秒よりはるかに短い周期でLEDが点滅します。

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 に答える