winform线程中如何等待串口数据返回_#北木迷RT-Thread开发笔记系列# 笔记8:线程,RT-Thread...

什么是线程

之前几个篇幅我们已经成功让RT-Thread系统在我们的实体板卡上面奔跑起来了,那么下面我们就要开始学习如何把系统运用在我们的项目上面,让我们开发起来更加得心应手。

494939b56cb56e981ed38939dfeb3fc8.png

图片来源网络

在最初介绍介绍RT-Thread系统中就有说过,一个嵌入式实时系统的核心就是系统调度器,而调度器的最小执行单位就是线程,也就是RT-Thread中的Thread,那么什么是线程呢

百度百科上面的解释如下:线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

我们把系统调度器比喻成为一个吊机,那么线程就像是吊机吊起来的货物,我们要完成货物的吊运,在同一时间只能吊一个货物到指定地点,那么我们就要根据货物的重要性来先后进行吊运,这就形成了系统的调度。

245ab9f99fbce037e5e9c0f0d30828e8.png

图片来源网络

为什么需要线程调度

了解完成什么是线程后,当然要知道我们为什么需要线程调度,其实在最开始介绍系统的时候就有提到过,单片机在同一个时间只能做一件事情 ,就像我们写无系统的裸机程序时候,主要的执行程序都抛在main函数的while循环里面,然后一件一件的执行,这样就会有一个问题,在排队执行的过程中,后面的任务需要等待前面的任务执行,这样就导致任务执行的时效性变差,浪费单片机性能。

8821c02c25effa02424c772a2f340e5a.png

图片来源网络

我们来举一个简单的例子:我们需要一个系统运行指示灯1秒钟亮灭循环,还需要每500毫秒在串口打印一个耗时1~5毫秒的信息,如果我们用while循环来实现,那么我们写出来代码就是先让灯点亮并输出第一次串口信息,然后进行延时500毫秒,输出第二次串口信息,然后延时500毫秒关闭灯并输出第三次串口信息,如此循环下去。这样运行下来我们就会发现一个问题,那就是灯亮灭的时间不准确,因为串口占用了时间,如果一次串口打印需要5毫秒,那么灯的延时就会变成500+5+500=1005毫秒。对于运行灯而言这5毫秒的差距可以忽略,但是如果是其他的实时性要求高的任务呢,这就很严重了。

cb6678f0a7077b09443bfad7d5db0a25.png

循环方式实现

下面我们来看下加入了任务调度的情况,我们还是根据上面的流程创建一个线程让系统运行指示灯亮起来,然后进行延时1秒,然后再让灯灭掉,如此循环,然后创建第二个线程开始使用串口发送数据,然后延时500毫秒,如此循环。这样看起来好像两个循环就冲突了,其实不然,他的秘密就隐藏在系统的延时函数中,当我们调用了延时函数后,这个线程就会被挂起,可以理解为暂时冻结它,让出了CPU的资源,在延时这段时间里,CPU就可以去执行串口打印数据的任务,这样就能实现了在系统指示灯延时中去执行串口打印任务,这样可以大大提高了CPU的运行效率。

ff43c28dc05900e805b8d561bff023c5.png

任务实现

互动问答:线程如何实现资源的共享?线程冲突如何解决?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值