RTOS的最基础功能是线程。
线程的调度是如何工作的?RT-thread官方的实验文档是最好的参考。
老规矩,先放法国人d'oxygen。
thread_sample 代码的调用关系图
有意思的是,RT有两种创建线程的方式 - 静态和动态,粗略的理解是,如果ROM大那就用静态,占用RAM小;反之就用动态。例程中两种都演示了。
静态的用rt_thread_init。要多做两件事情:
1)要先显示的定义好堆栈。static char thread2_stack[1024];
2)并且要预先定义static的内存控制块。 static struct rt_thread thread2;
(正常使用前时要rt_thread_startup,完时要记得 - rt_thread_detach将该线程控制块从对象管理器中脱离)
rt_thread_startup 函数调用图
rt_thread_detach 函数调用图
动态的用rt_thread_create。
(正常使用前时要rt_thread_startup,例程中没有释放内存,正常使用完时要记得 - rt_thread_delete)
本例中两个线程,1和2,各只运行一次,其他时间进入延时,也就是rt_thread_mdelay,包括rt_thread_resume,rt_thread_suspend。
suspend 函数调用图
rt_thread_resume 函数调用图
这两个函数在后面的例程中有展示,到时候再展开。