1

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

下面的代码获取滴答时间,但不是以毫秒为单位的时间。

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 ;
}

我的问题是

免费的 RTOS中,有没有办法以毫秒为单位获取当前的相对时间?

4

3 回答 3

1

根据这个相关问题,有一个configTICK_RATE_HZ价值。

使用这个值应该只是一点点简单的数学来确定一个刻度对应多少毫秒。就像是:

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

还有一组您可能想要研究的计时器 API,它们支持按时间间隔回调到您的代码中。不知道它是否适合您的需求,但也许值得一看:

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

于 2011-11-22T23:43:11.343 回答
1

蜱应该有一个固定的频率。1000Hz 滴答声 -> 每 1 毫秒触发一次中断和任务切换。情况并非如此,尤其是在您有其他中断的情况下。但它应该保持这个频率。

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

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

您可能还会询问FreeRTOS 列表

于 2011-11-23T10:08:52.440 回答
0

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

于 2018-04-17T16:33:20.637 回答