Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CANFestival定时器驱动getElapsedTime()可能存在问题 #21

Open
ZhuMingxun opened this issue Jan 4, 2023 · 2 comments
Open

CANFestival定时器驱动getElapsedTime()可能存在问题 #21

ZhuMingxun opened this issue Jan 4, 2023 · 2 comments

Comments

@ZhuMingxun
Copy link

ZhuMingxun commented Jan 4, 2023

你好,我分析了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()的计算值是否是错误的?
不知道我的理解对不对。请大神解释一下,谢谢。

@gbcwbz
Copy link
Owner

gbcwbz commented Jan 5, 2023

  • 定时器是面向HWTIMER设备的,所以就不讨论定时器ARR了,只讨论时间
  • canfestival 中 getElapsedTime 的注释是Get the time elapsed since latest timer occurence,就是上次定时器触发到现在的时间,所以 getElapsedTime 不包含两次 SetAlarm 之间的时间
  • rt_device_read 读取 HWTIMER 读到的是“自定时器开始 (rt_device_write) 之后的运行时”

@ZhuMingxun
Copy link
Author

  • 定时器是面向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()重新设置定时器)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants