单片机怎么实现真正的多线程?

2023-05-16

所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。

模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。

据说最近有多核的单片机,不过成本应该会高很多。

对于模拟的多线程,我知道的有两种方式:

1.基于时间片的轮询系统

我自己就写过这样一个系统,原理就是用systick给系统提供一个时间基准,一般我用10ms。

然后把整体产品功能成不同的任务(线程),并且为每个任务分配一个时间片。

我红色框标注的每个任务调度的时间,1代表10ms,50则代表500ms,每个任务执行的频率可以不同,方便释放cpu资源给更需要的任务。

主函数的循环里一直判断每个任务的状态。

这里我把任务直接封装成结构体,通过函数指针的方式去调用,方便不同的任务集中管理。

如果任务就绪,就执行,等该任务执行完,下一个任务才能执行,所以本质还是轮询。

只是每个任务可以灵活分配调度时间,不重要的任务执行次数少,重要的任务执行次数多,看起来像多线程的效果。

这种方式比传统的while(1)去轮询在程序架构上会好一点,任务管理和调度也灵活很多。

缺点就是任务在执行过程中无法被打断,不能马上切换到别的任务去执行。

这套系统我录制过教程,现在暂时开放给大家学习,后面可能会删掉。

想参考的找无际单片机就可以了,或者看下我下面这篇文章的开头

《单片机入门到高级开挂学习路径(附教程+工具)》

《单片机入门到高级开挂学习路径(附教程+工具)》

《单片机入门到高级开挂学习路径(附教程+工具)》

如果是实时性要求非常苛刻的产品,这个就不是很适合。

2.RTOS

RTOS应该是单片机最接近多线程的系统了,目的就是提高系统的实时响应能力。

比如说你正在主持一个电台节目,并且有一个播报天气的环节,你希望天气播报每隔 10 分钟播报一次,但是电台节目时间是1小时。

如果你使用while(1)轮询的方式去做,你可能会遇到这样的情况:天气播报被其电台节目占用了,导致它不能按照预定的时间进行。

但是,如果你使用的是 RTOS,它会把天气播报分配到高优先级,并且它会保证每隔 10 分钟就运行一次天气播报程序。

播报完以后继续回到电台节目,这样即使有其他任务占用了大量的资源,也不会影响到天气播报程序的正常运行。

这就是 RTOS 的工作原理,它通过分配任务的优先级,保证任务按照预定的时间计划进行。

但本质也是模拟多线程,因为播报电台节目的时候,cpu资源被天气预报抢占了,它们两个任务并没有同时执行

单片机实现多线程技术是一个比较复杂的技术,不仅需要掌握单片机的相关知识,还需要掌握多线程技术的相关知识,比如任务调度、任务同步、任务资源分配、任务通信等等。

一般都是用现成的RTOS,自己手写一个难度太大了。

对于单片机多线程技术的学习,我不建议新手刚开始就去学RTOS。

应该多做一些基于单片机的项目,把编程基础打扎实。

到那个时候,再去学RTOS时间成本会低很多,理解也会更深刻。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机怎么实现真正的多线程? 的相关文章

  • Git命令行拉取、更新、切换、提交您的项目(文件)

    Git命令操作指南 Git全局设置 span class token comment 查看当前用户和邮箱 span span class token function git span config user name span class
  • Anaconda下安装tensorflow (windows系统)

    因为之前Anaconda python都已经装好了 xff08 可以看之前文章Anaconda超详细安装教程 xff08 Windows环境下 xff09 fan18317517352的博客 CSDN博客 xff08 本人技术小白一个 xf
  • Vue/cli加快打包速度

    Vue cli加快打包速度 参考地址 1 external 43 CDN的方式 Vue 中使用externals和CDN来优化项目的体积 可以参考老夫之前写的方式 2 thread loader 请仅在耗时的操作中使用此 loader xf
  • 带你深入学习k8s--(一)Kubernetes集群部署

    目录 前言 xff1a 一 Kubernetes简介与架构 1 Kubernetes简介 2 kubernetes设计架构 二 实验环境搭建 1 集群环境初始化 2 所有集群节点安装kubeadm 3 拉取集群所需镜像 3 集群初始化 4
  • Ubuntu18.04 apt-getupdate 遇到问题解决

    sudo apt get update 遇到错误 Err 1 http mirrors aliyun com ubuntu xenial InRelease Could not resolve mirrors aliyun com Err
  • git submodule详解

    子模块 有种情况我们经常会遇到 xff1a 某个工作中的项目需要包含并使用另一个项目 也许是第三方库 xff0c 或者你独立开发的 xff0c 用于多个父项目的库 现在问题来了 xff1a 你想要把它们当做两个独立的项目 xff0c 同时又
  • Sinkhorn算法,正矩阵与双随机矩阵之间的关系

    Sinkhorn算法 Sinkhorn 算法描述了任意一个正矩阵 元素均为正 与双随机矩阵之间的关系 简略描述 Relations between arbitrary positive matrices and Doubly stochas
  • nvidia-smi命令报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.

    nvidia smi命令报错 xff1a NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver Make sure that the lat
  • UNIX环境高级编程-第一章

    1 UNIX体系结构 xff1a 严格意义上说 xff0c 可将操作系统定义为一种软件 xff0c 它控制计算机硬件资源 xff0c 提供程序运行环境 我们通常将这种软件称为内核 xff0c 因为它相对较小 xff0c 而且位于环境的核心
  • 单片机之认识元器件及焊接工作

    一 xff0c 认识元器件 二 xff0c 焊接前的准备工作 焊接的位置如图 xff1a 焊接的时候我们需要使用到电烙铁 xff0c 故我们需要知道其应该怎么用 电烙铁的使用 我们学校使用的焊台型号为ATTEN936 xff08 加热温度过
  • 单片机入门到高级开挂学习路径(附教程+工具)

    一 先帮大家解答几个问题 xff1a 温馨提醒 xff1a 文章所有资料在 无际单片机编程 公众号获取 1 单片机是什么 xff1f 答 xff1a 单片机就是一个微型CPU xff0c 把程序烧录芯片里面 xff0c 通过控制不同的外围电
  • 嵌入式开发真的不如程序员吗?

    本文很干很长 xff0c 有我从事技术多年的经验总结 xff0c 也有我艰辛创业的经历分享 xff0c 坚持看完 xff0c 我相信一定对你未来有所帮助 xff0c 看不完先收藏起来吃灰也不错哟 不知不觉 xff0c 我已经从事了嵌入式方向
  • 自学stm32,需要会到什么程度才能找到一份工作?

    说到自学 xff0c 小有体会 xff0c 自学的过程焦虑而痛苦 xff0c 这一切 xff0c 还是来源于对未来的不确定性 今天通过个人经历和经验 xff0c 希望能为你揭开迷雾 xff0c 找到前进的方向 回想我曾经自学单片机的时候 x
  • ASCII码对应表,ASCII码值的大小顺序

    刚开始基础计算机编程的时候 xff0c 学习的是二进制 十进制 十六进制 十进制是生活习惯中最常用的计数方法 xff0c 也是我们计数的思维逻辑 后来接触了计算机基础 xff0c 我们知道计算机都是用二进制表示的 xff0c 但是这种表示方
  • 学嵌入式好找工作吗?学了嵌入式4个月找不到工作怎么办?

    最近在某吧看到一个小伙伴提了一个让我有点感触的问题 他说学了嵌入式4个月出来都找不到工作 xff0c 该怎么办 xff1f 这个行业是不是不好找工作 xff1f 失业期间那种焦虑感 xff0c 我深有体会 xff0c 每天不断在支出 xff
  • stm32对c语言要求高吗?c语言什么水平可以学stm32?

    记得我刚出来工作的时候 xff0c 一直从事stc 51单片机产品的开发 xff0c 后来接触到了NXP的单片机 一下从51过渡到ARM xff0c 确实让我头疼了一段时间 xff0c 不过还好 xff0c 都是配置寄存器去开发 xff0c
  • 嵌入式工程师月薪有多少?零基础学嵌入式要多久?

    嵌入式开发在10年前 xff0c 对大多数人来说 xff0c 还是一个非常陌生的专业 xff0c 随着社会的发展 xff0c 技术的进步 xff0c 很多产品都在追求自动化 xff0c 智能化 xff0c 嵌入式也在不断地被大家所熟知 我刚
  • plc和单片机哪个更有前途?为什么本科生都不搞plc?

    相信很多学电气工程专业的都会学习PLC xff0c 我当初也是电气工程专业 xff0c 主要学的三菱PLC xff0c 后面也玩了下西门子的 当时觉得还挺神奇 xff0c 也对编程比较感兴趣 xff0c 不过学校学得太简单了 xff0c 基
  • 学stm32有机会进大公司吗?如何选择?

    进大公司似乎跟你会什么单片机并没有直接的关系 但凡做过几年研发的都知道 xff0c 虽然我们是从事嵌入式单片机开发 xff0c 但核心其实还是你的编程思维和水平 企业做产品不是固定用哪个单片机的 xff0c 而是根据市场的情况走 xff0c
  • 电气工程及其自动化就业方向及前景

    电气毕业 xff0c 工作10年 xff0c 聊聊这几年的感悟 全文约1800字 xff0c 认真看完 xff0c 相信还在迷茫的你一定茅塞顿开 首先声明一下 xff0c 我实习期间就自学转行进入嵌入式单片机开发了 自己并没有从事过电气工作

随机推荐

  • 大学如何自学嵌入式开发?

    我2011年就开始从事嵌入式软件开发 很多人觉得学习嵌入式开发比高考还难 xff0c 不知道怎么入门 xff1f 要学哪些东西 xff1f 嵌入式开发涉及的知识 xff0c 你确实一辈子都学不完 但是 xff0c 这不代表你需要花费很长的时
  • 嵌入式工作会越来越少吗?

    学习技术并非易事 xff0c 就像唐僧取西经 xff0c 需要经历皮肉之苦和精神上的折磨 学习最迷茫的无非是不确定自己能否学会 xff0c 学会以后能否落地 xff0c 给自己事业赋能 这种焦虑伴随着我当初整个自学过程 xff0c 直到找到
  • 解决ubuntu linux触摸板不能用问题

    解决ubuntu linux触摸板不能用问题 2011 04 16 01 40 其实很简单 xff1a 打开终端 xff0c 然后sudo i获取root权限 xff0c 然后 xff1a sudo modprobe r psmouse s
  • 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc

    大家好 xff0c 我是无际 有一周没水文了 xff0c 俗话说夜路走多了难免遇到鬼 最近就被一个热心网友喷了 说我的文章没啥营养 xff0c 所以今天来一篇烧脑的 哈哈 xff0c 开个玩笑 xff0c 不要脸就没人能把我绑架 主要是最近
  • spi协议时序图和四种模式实际应用详解

    大家好 xff0c 我是无际 上个章节我们讲解了spi接口定义 xff0c 今天我们更加深入讲解下spi协议时序图和spi四种模式的用法 刚开始接触单片机开发时 xff0c 最怕就是看时序图 xff0c 对于我来说就是奇怪的知识 特别是SP
  • 你用esp8266做出过什么有趣的东西?

    曾经有个40多岁的老板跟我说 xff0c 很羡慕我这种做技术的 xff0c 他也喜欢钻研 xff0c 感觉自己做产品很有成就感 男人是天生的小朋友 xff0c 都喜欢玩 xff0c 都喜欢钻研 我做单片机开发11年了 xff0c 深感技术的
  • stm32正点原子和普中或是野火哪个好?

    看了很多热心网友对正点原子 野火 普中等开发板的对比和评论 说这个讲的不行 xff0c 那个代码写得垃圾 xff0c 还有谁谁谁的像一坨屎 说真的 xff0c 有种卸磨杀驴的感觉 为什么这么说 xff1f 因为忽略了两个问题 xff1a 1
  • 嵌入式Linux和stm32区别? 之间有什么关系吗?

    本人从事嵌入式单片机开发11年 xff0c 很多人对嵌入式 单片机 STM32 Linux傻傻分不清楚 导致学习过程走了很多弯路 xff0c 明明只需要几个月学习时间 xff0c 却浪费了1 2年 xff0c 最后抱怨嵌入式也太高了吧 xf
  • 为什么有些人说单片机简单,我学起来这么吃力?

    相信我 xff0c 你不是学不会 xff0c 只是没找对方法 看完这篇文章 xff0c 你就发现原来自己学起来并没那么吃力 开始前点赞 43 收藏赶紧点起来 xff0c 不然我怕你看得太入神 xff0c 下次想看都找不到 很多人学单片机从入
  • 嵌入式系统中,FLASH中的程序代码必须搬到RAM中运行吗?

    这个问题 xff0c 核心还是得看你用什么芯片方案 xff01 嵌入式系统涉及技术栈特别庞大 xff0c 不仅仅大家理解的ARM 43 Linux而已 我从业11年 xff0c 也只敢说对其中一个方向熟悉而已 嵌入式系统中 xff0c 核心
  • stm32入门开发板选野火还是正点原子呢?

    两个可以说都是行业标杆 不能说哪个比哪个更好 xff0c 各有特色 xff0c 适合自己就是最好的 xff0c 同行之间都是相互参考去做的 我从以下几个维度来对比下 xff1a 1 教程 2 代码 3 开发板价格 4 进阶 一 教程 两家教
  • 树莓派为什么涨价了?

    任何东西涨价都是一个原因 xff1a 供不应求 别说树莓派 xff0c 很多芯片都涨价了 xff0c 比如说STM32 xff0c 去年最高峰涨了将近10倍 所以 xff0c 引发了很多有趣的事 比如说 xff1a 以前接到订单老板开心得睡
  • jtag和swd区别,该用哪个?

    我刚开始学习单片机是STC最经典的STC89C52RC 导致我后面很多51的产品应用都会选择STC xff0c 一方面是因为熟悉 xff0c 一方面是使用确实很方便 其中最让我满意的就是烧录 xff0c 可以直接用串口就可以下载程序 xff
  • 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法 匈牙利算法 xff0c 用于聚类结果分析 xff0c 先用图表示我当前遇到的问题 xff1a 这两列值是我用不同算法得到的聚类结果 xff0c 从肉眼可以看出第一列聚类为0的结果在第二
  • STM32之后哪块板子发展最好?

    从事开发10年了 xff0c 我来说说我个人见解 首先 xff0c 除非是顶尖的垄断技术 xff0c 否则一般不会有屹立不倒的芯片 站在研发经理的角度 xff0c 单片机选型时主要会考虑以下几个因素 xff1a 1 稳定性 2 价格 3 交
  • stm32用什么软件编程烧写比较好呢?

    今天给大家分享我从业单片机开发11年必备的神器 在刚入行不久 xff0c 看到那些老工程师费很大的劲去搭建开发调试环境 xff0c 让我很不解 我想有那工夫 xff0c 我程序都写完了 xff0c 如果有问题就看代码找Bug呗 直到后面做了
  • 嵌入式开发要学多久?要学哪些课程

    曾经有新手和我抱怨 xff1a 为什么嵌入式开发这么难 xff1f 相信我 xff0c 你不是学不会 xff0c 只是没找对方法 这是一片真正为 终结迷茫 而生的回答 xff0c 内容有点长 xff0c 如果你赶时间 xff0c 建议先点赞
  • 单片机volatile关键字的作用?

    最近我们无际单片机学员在做stm8和stm32项目的时候 xff0c 问volatile这个关键词怎么理解 xff1f 有什么作用 xff1f Volatile是C语言的一个关键字 xff0c 在stm8和stm32的固件库里也会经常看见这
  • STC89C51单片机相比于其他单片机具有那些优点?

    STC89C51只适合和同性能的51内核单片机相比 xff0c 性能不同并无可比性 11年前 xff0c 我就是通过自学STC89C51入行单片机开发的 到目前为止都非常经典 xff0c 很多开发板都是基于这个芯片去做的 我对STC单片机也
  • 单片机怎么实现真正的多线程?

    所谓多线程都是模拟的 xff0c 本质都是单线程 xff0c 因为cpu同一时刻只能执行一段代码 模拟的多线程就是任务之间快速切换 xff0c 看起来像同时执行的样子 据说最近有多核的单片机 xff0c 不过成本应该会高很多 对于模拟的多线