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

一次中断的软件定时器的回调函数,不能被高优先级的任务打断 #1817

Open
xiake468 opened this issue Sep 17, 2018 · 4 comments

Comments

@xiake468
Copy link

另外还发现一次中断的软件定时器,再没达到定时时间的时候,不能取消执行回调函数,周期的软件定时器就可以

@BernardXiong
Copy link
Member

需要说得更清晰些

@xiake468
Copy link
Author

额...是这样的,在rtconfig.h中 我将RT_TIMER_THREAD_PRIO设为5,在执行软件定时器的回调函数中(#define RT_USING_TIMER_SOFT 1 应该时软件定时器),释放一个信号量,另一个任务的级别设为1,用来接收信号量,在软件定时器释放回调函数后,程序并没有马上跳到另一个更高优先级的任务执行.而是执行完回调函数之后,才去执行另一个优先级高的任务.另外,这个定时器是RT_TIMER_FLAG_ONE_SHOT类型的

需要说得更清晰些

还有一件事是,我发现start一个ONE_SHOT定时器,在还没有到达执行回调函数的时间时(就是比如定时5s,现在是3s),这个时候stop这个ONE_SHOT定时器,可是到了5s后,依然会执行回调函数.

@xiake468
Copy link
Author

突然意识到您是熊谱翔老师吗??? 很崇拜和尊敬您,感谢您开发的rtt系统

@BernardXiong
Copy link
Member

timer thread说白了,还是一个线程。所以当一个线程优先级超过timer thread时,必然会去抢占timer thread。

而对于单次定时器,你可以跟踪下(例如记录一些时间戳),看看具体发生了什么。

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