RT-Thread 内核线程组成及调度

白话释义非常易懂

Posted by Sugar on July 9, 2019

背景介绍:
在进入 RT-Thread 多线程编程之前,有必要对线程了解稍微深入一点。
本文试图一边说“程序员”专用语,一边用白话来描述。
给想入门,但还没入门的人一个助力。

先上一张老图

这个图第一次出现在《形象表述多线程》一文中。

【“程序员”专用语】 1、CPU(Central Processing Unit),执行计算机指令的主体。 2、“scheduler”译为“调度器”,用于调度线程。

【白话】 1、人:干活的主体。 2、头脑(或思维):决定人干什么活。

线程的组成(又一张老图)

这个图第一次出现在《CubeMX 与 RT-Thread 接合的工作流》,以“文末彩蛋”形式出现。

【释义】
1、线程函数:就是线程要干的事。
2、线程控制块:操作系统调度线程的凭借。
3、线程栈:给线程函数分配的内存资源。

【要点提示】
1、图中对线程组成各部分的特点有明确标示。
2、各部分的结合点相关代码的详细说明,可以参考:
[野火®]《RT-Thread 内核实现与应用开发实战—基于STM32》第 6 章。

系统调度

野火书中说“在裸机系统中,程序的主体是 CPU 按照顺序执行的。而在多线程系统中,线程的执行 是由系统调度的。”

下面引用野火书里的一段话来当作对这个图的白话解释。

调度器

【要点提示】
1、“使用步骤”展示代码中使用调度器的步骤。
2、“运行过程”展示调度器是怎样找到线程函数的。

用线程的好处

引自[野火®]《RT-Thread 内核实现与应用开发实战—基于STM32》5.2节。

加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。

RT-Thread 代码中的常识

引自[野火®]《RT-Thread 内核实现与应用开发实战—基于STM32》

1、在 RT-Thread 中,数字优先级越小,逻辑优先级越高。
2、线程优先级表的索引对应的是线程的优先级。
3、系统定时器列表初始化由函数 rt_system_timer_init()来完成,在初始化调度器前需要先初始化系统定时器列表。

PS

在《软件架构训练计划》继续进行之前,算上本篇推文已经有三篇推文打底了,分别是:
《一招通吃MDK5、IAR、GCC》、《怎样剪裁所需的 RT-Thread 内核》和本文。

下面展示一下为训练准备的 demo 效果(目前 github 上还没用 RT-Thread,都是调好的 CubeMX 工程)。
视频1
视频2
视频3
下面的训练视频不再像以前一样从 0 开始配置 CubeMX,而是直接使用 github 上的 demo 工程为起点。

关注作者

欢迎扫码关注我的公众号MultiMCU EDU

提示:在公众号“关于我”页面可加作者微信好友。

请我喝杯咖啡如何?

微信 weixinfukuan 支付宝 zhifubaofukuan