PIC32,自由RTOS时钟,单位ms

时间:2011-11-22 23:28:46

标签: c timer freertos

我有一个运行RTOS的PIC32MX460F512L,我正在寻找一种方法来获得代码中两点之间的ms差异。

以下代码获取的是时间,但不是以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中有没有办法以ms为单位获取当前相对时间?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

Ticks应具有固定频率。 1000Hz刻度 - >中断和任务切换每1 ms触发一次。这不是那个,特别是如果你有其他中断。但它应该保持这个频率。

我相信你应该能够比较两个滴答计数并除以滴答率以结束延迟。

另一个经典技巧是在定时间隔开始时直接切换GPIO引脚,再在结束时(重复)直接切换GPIO引脚,然后使用示波器捕获间隔。这应该给出非常精确的实时结果。

您可能还会问FreeRTOS list

答案 2 :(得分:0)

FreeRtos在pic32端口使用定时器1,你可以在port.c文件中找到timer1寄存器配置,并以毫秒为单位计算精确的滴答速率时基config_TICK_RATE_HZ。并乘以dedes tick值。  通常是base config_TICK_RATE_HZ: 1000HZ〜1MS 100HZ〜10MS