深入多任务的第一跃,揭开多任务的核心秘方。

其他内容可以关注目录, FreeRTOS使用与内部机制(引言)-CSDN博客

----------------------------------------------------------------------------------------------------------------------------

上一章虽然很短,但对于很多没接触过RTOS的小可爱来说,可能出手就是王炸。

其实也很能理解他们,毕竟我们一开始所接触到的单片机基本上单核CPU。

单核简单说,干活的只有一个人。如果这一个人能同时干两件事,甚至多件事,在生活中我们称这种人是"奇才"。

我们先大致看看这个"奇才",也就是CPU是怎么工作的。

我们将CPU暂且看作无情的机器,它只会按照特地的流程工作。

也就是别人说什么它就做什么。

而这个流程在哪?

当然是烧入进单片机Flash中的“代码”,对于STM32在通过ICode这条读指令总线可以获取相关指令码。

扩展:可能有些小伙伴有些疑惑了,我怎么好像记得还要加载到对应的RAM才能执行。其实你没有记错,对于 X86 或者 ARM-A 芯片的 CPU之类的是这样的,但这里的单片机运用了XIP技术。所谓XIP 全称为 eXecute In Place,即芯片内执行,是指 CPU 直接从存储器中读取程序代码执行,而不用再读到内存中。具体可以上网了解,本文重点不在这,就不过多阐述了。

CPU通过取到的指令码执行然后相关操作。

这一步,许多人也总结为“取指执行”

现在我们执行下面两条简单的语句,看看CPU是怎么执行。

int a = 5
a = a + 2;

我们知道CPU是看不懂C语言的, 它只认识机器码,而我们大部分凡人是看不懂机器码的。

然而我们的前辈们也深知这一点,所以发明了相对于机器码更加有助于人类理解的助记符,也就是汇编。汇编与机器码之间存在一一对应的关系,所以我们需要用汇编当做桥梁翻译一下机器码。

例如a = a + 2用汇编的话说, 可以翻译成下面三句话。(这里备注一下,以后哪个地方可能还会见到。)

LDR R0, [a]

ADD R0, R0, #2

STM R0, [a]

对于大部分小可爱可能蒙了,脑海中估计在想:这啥意思啊?而且不就执行一句话, 怎么内部拆出了三个步骤。

先别慌,本文只会涉及一丢丢汇编,对于这三句话我接下来用通俗易懂的话翻译一遍。

在这之前我们先想想如何把大象装入冰箱,注意不要试图去问chatGPT。

第一步打开冰箱。

第二步把大象放进去,先别想怎么放进去的,我说能就是能。

第三步关上冰箱。

你看把大象放进冰箱都拆出了三步。

而执行a = a + 2;的时候,CPU先计入下a的值,存到某个寄存器中,然后对该值加2,在还给a。

这就是上面那条语句的理解。

聪明的小伙伴,可能发现了问题的关键。

在一段完整的程序中,我有这么多指令,CPU是根据什么判断我该执行那条语句呢?

一下子问到了关键,这也触及到了一点RTOS的“天机”。

这里就需要引入一点小知识:

在CPU内部有16个寄存器,其中就有一个叫PC寄存器的家伙,它作为指挥官,指挥着CPU将会执行哪。

有的小伙伴可能突然会问,如果它指挥错了呢?(坏笑)

你小子不对劲。

指挥错了当然是要坐牢的,而这个牢房就在某个异常中断中,你以后大可一试。

当然如果指挥的好可能会发挥奇效,还记得前面说过的两个函数,容我去CV过来。

void task1(void) {
    int a = 0;
    while(1) {
        a++;
    }
}
 
void task2(void) {
    int a = 0;
    while(1) {
        a--;
    }
}

有些小可爱那时不是疑惑,两个死循环怎么做到几乎同时运行的?现在可以回答了,这就是PC指挥的结果,一下指挥CPU去执行task1,一下指挥CPU去执行task2。

这下小可爱,心中是不是明朗了许多。

那是不是RTOS就是这样执行多任务的呢?

我的回答是,对也不对。因为内部细节还要复杂一点。

我们可以想这样一个问题,有一天你在看书,突然你妈叫你去买菜。

看书是任务1,买菜是任务2。

这时正在看书的你是不是需要加个书签,等做完任务2回来接着看。

而加书签的动作就是保存现场

CPU好好的在执行一个任务的时候,突然被叫去做另一个任务,也需要保存好当前任务的现场,不然回来的时候都不知道从哪里做了,至于保存什么现场,那就是接下来几章的话题了。

本章用一句话总结RTOS执行多任务的核心秘方,就是PC寄存器有序指挥,加上现场工作的保存,才让两个乃至多个任务打破了while(1)的阻碍。

哎~不知道现实中有没有小可爱突破了爱情的阻碍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值