2016-02-02 33 views
2

我遇到FreeRTOS的問題,它似乎systick()率是1/2的預期率。所有定時器或任務延遲功能大約需要2X的時間。這在版本8.2.0和8.2.3中使用STM32F100處理器進行了驗證。FreeRTOS慢systick

還有另一個帖子looks very similar。這位開發人員正在使用MSP430,並聲稱在預計1000Hz的節拍速率時,節拍率爲400Hz。

RCC寄存器配置看起來是正確的。如果我創建了一個非FreeRTOS項目,其中的systick是正確的,它具有與FreeRTOS版本相同的RCC配置。

對此提出建議?

+0

發佈您的RCC配置。 – LPs

+1

MCO引腳(單片機時鐘輸出)是否可用?如果是這樣,您可以配置此引腳輸出不同的內部時鐘(例如SYSCLK),並使用示波器測量該引腳的頻率以檢查時鐘是否符合您的期望。如果不是這樣,您可能連接了錯誤的外部振盪器,或者您的時鐘配置有誤。 – Habi

+1

確保在FreeRTOSConfig.h中正確設置了「configCPU_CLOCK_HZ」和「configTICK_RATE_HZ」。還要檢查port.c中的'vPortSetupTimerInterrupt()'以瞭解它在做什麼。 – kkrambo

回答

2

當我讀到:

我創建了一個非常簡單的任務,延遲4秒,並報告已發生滴答聲 實際數量。滴答是正確的,但實際上延遲約爲8秒。

當閱讀本我的想法是,如果延遲是蜱的號碼是否正確,但時間是不同的,那麼這簡直就是在不同的頻率運行到您認爲CPU時鐘的情況下,它是。也許configCPU_CLOCK_HZ是錯誤的。然而,那麼你寫:

#undef OS_USE_TRACE_SEMIHOSTING 
#define OS_USE_TRACE_ITM 

你提到semihosting。你在使用半主機嗎?如果是這樣,不要,它會弄亂你的時間,因爲它會在輸出到主機時停止CPU - 這可能是你看到的問題。