canfestival-rtt
canfestival-rtt copied to clipboard
CANFestival定时器驱动getElapsedTime()可能存在问题
你好,我分析了CANFestival定时器驱动timer_rtthread.c,发现存在以下场景: 第一次调用setalarm(),设置了定时器ARR为65535,定时器CNT置0,定时器启动;-》在CNT计数到10000时,再一次调用setalarm(),设置了定时器ARR为50000,定时器CNT置0,定时器重新启动;-》在CNT又到10000时,第三次调用setalarm(),此时,setalarm()内部getElapsedTime()返回值好像不对,计算时少了第一次调用setalarm()到第二次调用setalarm()之间的时间(elapsedtime)。 简单说就是在定时器中断触发前,多次调用setalarm()函数,getElapsedTime()的计算值是否是错误的? 不知道我的理解对不对。请大神解释一下,谢谢。
- 定时器是面向HWTIMER设备的,所以就不讨论定时器ARR了,只讨论时间
- canfestival 中
getElapsedTime
的注释是Get the time elapsed since latest timer occurence,就是上次定时器触发到现在的时间,所以 getElapsedTime 不包含两次 SetAlarm 之间的时间 - rt_device_read 读取 HWTIMER 读到的是“自定时器开始 (rt_device_write) 之后的运行时”
- 定时器是面向HWTIMER设备的,所以就不讨论定时器ARR了,只讨论时间
- canfestival 中
getElapsedTime
的注释是Get the time elapsed since latest timer occurence,就是上次定时器触发到现在的时间,所以 getElapsedTime 不包含两次 SetAlarm 之间的时间- rt_device_read 读取 HWTIMER 读到的是“自定时器开始 (rt_device_write) 之后的运行时” 也就是说,如果在定时器中断触发前,多次调用SetAlarm,会导致getElapsedTime的值不是真正的 ”上次定时器触发到现在的时间“,而是最近一次SetAlarm到现在的时间,不包含两次 SetAlarm 之间的时间。如果是这样的话,是否需要改进一下?以防上述场景(PS:这里假设每次setalarm()都会调用rt_device_write()重新设置定时器)