我有一个运行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为单位获取当前相对时间?
答案 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