我下载的是最新的trunk代码。
线程间切换调用的是
rt_hw_context_switch 函数, 也就是切换了线程的上下文.
调用顺序如下:
scheduler.c->rt_schedule()->rt_hw_context_switch(......).
rt_schedule函数分别被如下函数调用过:
rt_thread_startup
rt_thread_yield
rt_thread_sleep
rt_thread_timeout
rt_thread_exit
在ipc.c中也有好些次调用
初步分析,这些函数应该都是被线程自身调用的,和调度器没有关系啊.
问题一:
不明白rt_schedule()函数是何时被调度器相关的代码调用的?
-------------------------------------------------------------------------
初始化线程的时候,最后一个参数是 tick, 关于这个参数的解释如下(见<RT-Thread实时操作系统编程指南, 版本 0.3.0>第51页)
"时间片(tick) 的单位是操作系统的时钟节拍,当系统中存在相同优先级线程时,这个参数指
定线程一次调度能够运行的最大时间长度,这段时间片运行结束后,调度器自动选择下一个就绪
的同优先级线程进行运行。"
问题二:
调度器是随时随地都在监控每个线程的运行时间片么? 如果是,那调度器也是一个线程吗? 它会很频繁的一直运行吗?
如果不是线程,那调度器是如何运行的? 固定周期的中断?
希望能够结合源代码帮我解答上述疑问, 我刚接触RTT,代码还没看懂,非常感谢!