|
发表于 2010-5-12 10:10:33
|
显示全部楼层
我斗胆帮楼主改下内容,如果楼主能接受,我想这是一个很好的讨论.
标题: 再次讨论 RTT- 定时器tick的不妥
rt_tick_increase()函数的调用关系跟踪如下(-> 符号表示调用关系, == 符号表示等同调用关系):
rt_tick_increase() -> rt_timer_check() -> t->timeout_func(t->parameter) == rt_thread_timeout(thread)
-> rt_schedule() -> {rt_current_thread = to_thread;}
到此,rt_current_thread已经被改变了!而当rt_timer_check()函数返回之后,rt_tick_increase()函数会调用
rt_thread_self()来获得当前线程,其实这时候它返回的并不是“被中断的当前线程”,而是rt_thread_timeout() 函数引起的某个新的就绪线程。
所以对它进行{-- thread->remaining_tick;}操作是错误的!
另贴一个FFXZ的公开邮件:(我未经FFXZ同意就公开了,图中隐去的是各人的ID,并非有意掩饰什么.)
(原文件名:mail-ffxz.jpg) |
|