单片机怎么实现真正的多线程?
所谓多线程都是模拟的,本质都是单线程,因为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时间成本会低很多,理解也会更深刻。
相关文章:
单片机怎么实现真正的多线程?
所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。据说最近有多核的单片机,不过成本应该会高很多。对于模拟的多线程,我知道的有两种…...
【LeetCode】剑指 Offer(23)
目录 题目:剑指 Offer 46. 把数字翻译成字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 46. 把…...
[免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 汽车威胁狩猎专栏长期更新,本篇最新内容请前往: …...
LinuxFTP文件传输服务和DNS域名解析服务
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
二叉搜索树原理及底层实现
二叉搜索树BST 概念 二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都…...
python自动化办公(一)
本文代码参考其他教程书籍实现。 文章目录文件读写open函数读取文本文件写入文本文件文件和目录操作使用os库使用shutil库文件读写 open函数 open函数有8个参数,常用前4个,除了file参数外,其他参数都有默认值。file指定了要打开的文件名称&a…...
LeetCode - 198 打家劫舍
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣(LeetCode) 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装…...
简单粗暴的分布式定时任务解决方案
分布式定时任务1.为什么需要定时任务?2.数据库实现分布式定时任务3.基于redis实现1.为什么需要定时任务? 因为有时候我们需要定时的执行一些操作,比如业务中产生的一些临时文件,临时文件不能立即删除,因为不清楚用户是…...
蓝桥杯第五天刷题
第一题:数的分解题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2和 4,一共有多少种不同的分解方法&…...
Java数组的定义和使用(万字详解)
目录 编辑 一. 数组的基本概念 1、什么是数组 2、数组的创建及初始化 1、数组的创建 2、数组的初始化 3、数组的使用 (1)数组中元素访问 (3)遍历数组 二、数组是引用类型 1、初始JVM的内存分布 2、基本类型变量与引用类…...
【SpringBoot】自定义Starter
🚩本文已收录至专栏:Spring家族学习之旅 👍希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候,我们发现使用很多技术都是直接导入对应的starter,然后就实现了springboot整合对应技术,再加上一些简…...
【C陷阱与缺陷】----语法陷阱
💯💯💯 要理解一个C程序,必须理解这些程序是如何组成声明,表达式,语句的。虽然现在对C的语法定义很完善,几乎无懈可击,大门有时这些定义与人们的直觉相悖,或容易引起混淆…...
虹科分享| 关于TrueNAS十问十答
上一篇文章我们向您介绍了虹科新品HK-TrueNAS企业存储,很多小伙伴会疑问到底什么是NAS存储,之前常用的磁盘、磁带属于什么存储架构,NAS存储好在哪里,什么时候使用NAS?今天我们整理了关于TrueNAS的十问十答,…...
Https 笔记
HTTP TLS TLS 的前身是 SSL 非对称加密的核心: 两个密钥(公私) https 需要第三方CA(证书授权中心)申请SSL证书以确定其真实性 证书种包含了特定的公钥和私钥 密钥交换 自己将私钥上锁后发给对方对方也上锁 在还回来…...
【Python+requests+unittest+excel】实现接口自动化测试框架
一、框架结构: 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…...
MySQL终端的使用及其数据类型的使用
什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,…...
长视频终局:一场考验资金储备的消耗战
赢者通吃,似乎已成为各行各业的常识,但事实真的是这样吗?20世纪70年代,石油价格高涨,在墨西哥湾油田拍卖中高价拍得油田的企业,要么亏损,要么收入低于预期,但仍然有无数企业在高价竞…...
javaEE初阶 — CSS 常用的属性
文章目录CSS 常用的属性1 字体属性1.1 设置字体家族 font-family1.2 设置字体大小 font-size1.3 设置字体粗细 font-weight1.4 文字倾斜 font-style2 文本属性2.1 文本颜色2.2 文本对齐2.3 文本装饰2.4 文本缩进2.5 行高3 背景属性3.1 背景颜色3.2 背景图片3.3 背景位置3.4 背景…...
【面试题】如何取消 script 标签发出的请求
大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库问题之前在业务上有这样一个场景,通过 script 标签动态引入了一个外部资源,具体方式是这样的const script document.…...
蓝桥杯嵌入式(G4系列):RTC时钟
前言: 关于RTC时钟的HAL库配置我也是第一次,之前都是用库函数的写法,这里写下这篇博客来记录一下自己的学习过程。 STM32Cubemx配置: 首先点击左侧的Timers的RTC,勾选以下选项 进入时钟树配置 进入时间设置࿰…...
保姆级教程:用NumPy手搓一个逻辑回归,搞定西瓜书3.0α数据集分类
从零实现逻辑回归:用NumPy解析西瓜数据集分类问题在机器学习入门阶段,理解算法原理与代码实现之间的桥梁至关重要。本文将以周志华《机器学习》中的西瓜数据集3.0α为例,带你用纯NumPy实现逻辑回归模型,避开框架封装,直…...
数据驱动VS物理模型:随机森林在电动汽车跟驰行为预测中的精度革命
1. 项目概述与核心价值在智能交通和自动驾驶技术快速发展的今天,如何精准地模拟和预测道路上车辆的跟驰行为,成为了一个既基础又关键的研究课题。无论是为了设计更安全的辅助驾驶系统,还是为了构建更真实的交通流仿真环境,一个可靠…...
鸿蒙PC:Qt适配OpenHarmony实战【番茄刻】:工作和休息两种倒计时如何写成一个 QML 状态机
前言 欢迎加入鸿蒙PC开发者社区,共同打造开发者工具生态:鸿蒙PC开发者社区 :https://harmonypc.csdn.net/ 项目开源地址:https://atomgit.com/lqjmac/qtfqk 我更愿意把这类 Demo 当成工程切片来看:功能要小…...
量子LDPC码与横向门技术的突破与应用
1. 量子LDPC码与横向门技术概述量子低密度奇偶校验(qLDPC)码作为量子纠错领域的重要突破,近年来在容错量子计算中展现出独特优势。这类码字通过稀疏校验矩阵实现高效纠错,其核心价值在于:常数编码率:逻辑量…...
C盘告急别慌!保姆级教程:把WSL2的Ubuntu 20.04完整搬家到D盘(附恢复普通用户权限)
C盘告急别慌!保姆级教程:把WSL2的Ubuntu 20.04完整搬家到D盘(附恢复普通用户权限)当C盘空间不足的红色警告频繁弹出,而你的WSL2 Ubuntu系统正占用着宝贵空间时,这篇文章将成为你的救星。不同于常规安装教程…...
别再乱删了!一文理清Unity工程里Assets、Library等6个核心文件夹的作用与关系
Unity工程目录深度解析:从Assets到UserSettings的完整指南在Unity开发过程中,工程目录结构就像一座精心设计的建筑,每个文件夹都有其特定的功能和存在意义。对于刚接触Unity的开发者来说,理解这些文件夹的作用和相互关系ÿ…...
总结模式的智能化升级
📋 本文目录 一、前言 二、从工具到智能系统的升级 三、工具链完整演示 四、智能总结Agent整合实战 五、智能总结系统的核心价值 六、总结与展望 一、前言 1.1 本节内容简介 我们已经有了5个好用的总结工具,但问题来了:工具是死的&am…...
Unity游戏实时翻译工程化实践:从XUnity.AutoTranslator配置到本地化流水线构建
1. 这不是“加个插件就完事”的翻译方案,而是游戏本地化工程的起点你刚在Unity Asset Store里搜到XUnity.AutoTranslator,点开文档看到“支持实时翻译”“自动注入UI文本”,心里一热:终于能绕过繁琐的多语言资源表管理,…...
用PyTorch和TD3教AI玩赛车:从像素输入到稳定驾驶的保姆级调参指南
用PyTorch和TD3构建赛车AI:视觉输入下的强化学习调参实战当游戏画面从单纯的娱乐载体转变为强化学习的训练场时,每一个像素都承载着决策信息。CarRacing-v2环境将这种挑战具象化——96x96的彩色图像输入需要转化为精确的转向、油门和刹车控制。不同于传统…...
APP 的架构设计
APP 的架构设计是指构建移动应用时的整体结构规划,主要解决“代码怎么组织、模块怎么分工、数据怎么流动、功能怎么扩展”等问题。一个好的架构能让 APP 更稳定、更易维护、更易多人协作和长期迭代。下面从常见架构模式 → 核心分层 → 设计原则 → 技术选型 → 实际…...
