2011-11-22 16 views
1

我有一個運行RTOS的PIC32MX460F512L,我正在尋找一種方法來獲取代碼中兩點之間的差異。PIC32,Free RTOS時鐘,單位爲ms

下面的代碼獲取tick時間,但不是以ms爲單位的時間。

static unsigned long gMSTP_timer_tick = 0 ; 
void MSTP_timer_reset() { 
    gMSTP_timer_tick = xTaskGetTickCount() ; 
} 
FLOAT32 MSTP_timer_differences() { 
    unsigned long differences = xTaskGetTickCount() - gMSTP_timer_tick ; 
    gMSTP_timer_tick += differences ; 

    return (FLOAT32) differences ; 
} 

我的問題是

free RTOS有沒有辦法讓在毫秒當前相對時間?

回答

1

蜱應該有一個設定頻率。 1000Hz滴答 - >每1毫秒觸發一次中斷和任務切換。它不會完全是這樣,特別是如果你有其他中斷。但它應該保持這個頻率。

我相信你應該能夠比較兩個滴答計數併除以滴答速度以最終延遲。

另一個經典的技巧是直接在定時間隔開始時切換GPIO引腳,並在結束時重複(重複),然後使用示波器捕獲間隔。這應該會給出非常精確的實時結果。您可能還會問FreeRTOS list

+2

它看起來像定時器在任何給定時間關閉多達5-8毫秒。在更詳細地查看它之後,我發現這是因爲另一箇中斷。 –

1

According to this related question,有一個configTICK_RATE_HZ值。

使用這個值,它應該只是一個簡單的數學的一點點,以確定多少個滴答對應的毫秒數。例如:

return (FLOAT32) (differences/configTICK_RATE_HZ/1000); 

還有一組定時器API您可能想要查看,它支持按定時間隔將代碼回調到您的代碼中。不知道是否會滿足您的需求或沒有,但也許這將是值得一試:

http://www.freertos.org/FreeRTOS-Software-Timer-API-Functions.html

+0

configTICK_RATE_HZ == 1000,所以一個tick值得一個ms?我的測試表明,否則。 –

+0

@Stevensmethurst:就像家人一樣,他說「我只知道一句話,而這一句解釋那句話」,我根本不知道FreeRTOS。我只是查找文檔/尋找現有的答案,可能有一個滴答計數常數,所以你可以做數學。這聽起來不對,錯誤/錯誤配置如果你的滴答計數不符合配置常數的方式。如果它是預期的行爲,我會研究其他API。也許那些定時器功能... –

相關問題