ESP32定时器精度不准?经测试使用auto_loader模式,定时中断每周期会比实际预定时间长 125ns 左右。请问是什么原因?
测试流程如下:
TIMER_GROUP_0 timer0 设置为 TIMER_COUNT_UP,autoreload 2分频 模式,定时50ms中断使能;
TIMER_GROUP_0 timer1 设置为 TIMER_COUNT_UP,2分频 自由计数;
每次 timer0 中断时读取timer1的定时器计数,并通过线程打印出来。可以看到,每个定时周期都会比设定的时间(50ms)多 125ns!
并且加入Timer0定时周期变化,比如设置500ms,每个定时周期多出的时间将会变成50ns!居然是浮动的!
定时器在中断后autoreload 为什么会损失时间呢?
期望定时器周期精准。
下面是测试过程的打印信息:
可见每次Timer0中断周期都大于 50ms,并且中间会有高达 4us 的时间波动(可能是CPU进入临界区关闭中断导致?)
Timer0 isr. timer1 time stamp = 13000036800 ns(13.00003680 s)
Timer0 isr. timer1 time stamp = 13050032875 ns(13.05003287 s)
Timer0 isr. timer1 time stamp = 13100032950 ns(13.10003295 s)
Timer0 isr. timer1 time stamp = 13150037025 ns(13.15003702 s)
Timer0 isr. timer1 time stamp = 13200033100 ns(13.20003310 s)
Timer0 isr. timer1 time stamp = 13250041200 ns(13.25004120 s)
Timer0 isr. timer1 time stamp = 13300033225 ns(13.30003322 s)
Timer0 isr. timer1 time stamp = 13350037300 ns(13.35003730 s)
Timer0 isr. timer1 time stamp = 13400033375 ns(13.40003337 s)
Timer0 isr. timer1 time stamp = 13450037450 ns(13.45003745 s)
ESP32 定时器精度不够的问题求助!
Re: ESP32 定时器精度不够的问题求助!
能否提供一下测试代码 ?
是在中断中读数的吗? 中断优先级如何配置的 ? 在哪个核上处理中断的 ?
是在中断中读数的吗? 中断优先级如何配置的 ? 在哪个核上处理中断的 ?
Who is online
Users browsing this forum: No registered users and 84 guests