我有一个运行实时操作系统的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 ;
}我的问题是
在免费实时操作系统中,是否有一种方法可以获得ms中当前的相对时间?
发布于 2011-11-23 10:08:52
蜱应该有一个固定的频率。1000赫兹滴答->中断和任务切换触发每1毫秒。不会是这样的,特别是如果你有其他干扰的话。但它应该保持这个频率。
我相信你应该能够比较两个滴答计数,除以滴答率结束的延迟。
另一个经典的技巧是在定时间隔开始时直接切换GPIO引脚,在时间间隔结束时再切换一次(重复),然后使用示波器捕捉间隔。这应该会给出一个非常精确的实时结果。
你也可以问FreeRTOS列表。
发布于 2011-11-22 23:43:11
根据这个相关的问题,有一个configTICK_RATE_HZ值。
使用这个值,它应该只是一点简单的数学,以确定一组滴答对应多少毫秒。类似于:
return (FLOAT32) (differences / configTICK_RATE_HZ / 1000);还有一组计时器API可能需要查看,这些API支持按时间间隔对代码进行回调。不知道它是否适合你的需要,但也许它值得一看:
http://www.freertos.org/FreeRTOS-Software-Timer-API-Functions.html
发布于 2018-04-17 16:33:20
FreeRtos在pic32端口中使用计时器1,您可以在port.c文件中找到timer1寄存器配置,并在毫秒内计算精确的滴答率时间基config_TICK_RATE_HZ。并乘以除以滴答值。基频config_TICK_RATE_HZ: 1000 1MS~1ms 100 1MS~10 1MS
https://stackoverflow.com/questions/8235393
复制相似问题