rtos的最通俗理解行业大佬用一篇文章带你快速理解rtos(代码片段)

韦东山 韦东山     2022-12-06     337

关键词:

5分钟拿下你的三连,RTOS的最通俗理解!

单片机_RTOS_架构

1. RTOS的概念

1.1 用人来类比单片机程序和RTOS

在这里插入图片描述

妈妈要一边给小孩喂饭,一边加班跟同事微信交流,怎么办?

1.1.1 我无法一心多用

对于单线条的人,不能分心、不能同时做事,她只能这样做:

  • 给小孩喂一口饭
  • 瞄一眼电脑,有信息就去回复
  • 再回来给小孩喂一口饭
  • 如果小孩吃这口饭太慢,她回复同事的信息也就慢了,被同事催:你半天都不回我?
  • 如果回复同事的信息要写一大堆,小孩就着急得大哭起来。

这种做法,在软件开发上就是一般的单片机开发,没有用操作系统。

1.2.2 我可以一心多用

对于眼明手快的人,她可以一心多用,她这样做:

  • 左手拿勺子,给小孩喂饭
  • 右手敲键盘,回复同事
  • 两不耽误,小孩“以为”妈妈在专心喂饭,同事“以为”她在专心聊天
  • 但是脑子只有一个啊,虽然说“一心多用”,但是谁能同时思考两件事?
  • 只是她反应快,上一秒钟在考虑夹哪个菜给小孩,下一秒钟考虑给同事回复什么信息

这种做法,在软件开发上就是使用操作系统,在单片机里叫做使用RTOS。

RTOS的意思是:Real-time operating system,实时操作系统。

我们使用的Windows也是操作系统,被称为通用操作系统。使用Windows时,我们经常碰到程序卡死、停顿的现象,日常生活中这可以忍受。

但是在电梯系统中,你按住开门键时如果没有即刻反应,即使只是慢个1秒,也会夹住人。

在专用的电子设备中,“实时性”很重要。

1.2 程序简单示例

// 经典单片机程序
void main()

	while (1)
    
        喂一口饭();
        回一个信息();
    

------------------------------------------------------
// RTOS程序    
喂饭()

    while (1)
    
        喂一口饭();
    


回信息()

    while (1)
    
        回一个信息();
    


void main()

    create_task(喂饭);
    create_task(回信息);
    start_scheduler();
    while (1)
    
        sleep();
    

在这里插入图片描述

2. 架构的概念

2.1 用人来类比电子产品

在这里插入图片描述

在电子系统中,CPU就是大脑,CPU有很多种类别,被称为架构。

常见的有:

  • ARM:
    目前主流的架构,用得最广,芯片公司需要付费购买,再搭配各种模块才能设计出芯片。
    目前华为被美国制裁,无法获得最新的ARM架构;
    对于其他公司,购买ARM新架构的价格也不低。
  • RISC-V:
    后起之秀,开源、免费。
    目前华为海思的HI3861、乐鑫的ESP32-C3等芯片,都是使用RISC-V的单片机芯片;
    平头哥和全志的D1芯片,是使用RISC-V的、能运行Linux的芯片;
    RISC-V作为全新的架构,没有历史包袱,设计优美,在技术上大有可为,另外它开源无需授权,能摆脱技术的卡脖子问题。

2.2 要深入理解RTOS就必须深入理解CPU架构

如果只是使用别人移植好的RTOS来写程序,当然不需要了解CPU架构。

甚至编写驱动程序时,也不需要了解CPU架构:因为我们操作的是CPU之外的设备,不是操作CPU。

但是,如果你想达到如下目标,就需要先了解CPU架构:

  • 深入理解RTOS的内部实现
  • 移植RTOS
  • 解决疑难问题

3. 课程重点

对于同一个电子产品,编写程序时:

  • 不使用RTOS时,处理多个事情就像单线条的妈妈一样,一件一件地顺序做事,前后有影响。
  • 使用RTOS时,就像可以一心多用的妈妈一样,事情之间的影响可以降到最低,多件事可以“同时”进行。

我们要讲的内容就是:

  • RTOS部分:怎么在单片机上,移植、使用ROTS,RTOS的内部实现
  • CPU架构:深入理解CPU架构,才能移植RTOS、深入理解RTOS

傅里叶变换通俗解释及快速傅里叶变换的python实现

  通俗理解傅里叶变换,先看这篇文章傅里叶变换的通俗理解!  接下来便是使用python进行傅里叶FFT-频谱分析:一、一些关键概念的引入1、离散傅里叶变换(DFT)    离散傅里叶变换(discreteFouriertransform)傅里... 查看详情

一篇文章带你深入理解zookeeper

一篇文章带你深入理解Zookeeper本文来自作者投稿,作者:林湾村龙猫,Hollis做了一些修改和补充。随着互联网技术的发展,大型网站需要的计算能力和存储能力越来越高。网站架构逐渐从集中式转变成分布式。虽然分布式和集中... 查看详情

带你通俗易懂地理解常用通信协议原理!

这些显示电子系统中信号波形的动图,有助于帮助我们理解传输的机理。1SPI传输▲图1 SPI数据传输▲图1.2 SPI数据传输(2)▲图1.3 SPI时序信号2I²C传输▲图1.2.1 I2C总线以及寻址方式3UART传输▲图1.3.1 PC上通过UART来调... 查看详情

带你快速理解freertos的代码规范

关注「嵌入式大杂烩」,选择「星标公众号」一起进步![导读]遇到些朋友感觉FreeRTOS内核代码看起来很不习惯,不习惯其编码风格,本文就来梳理一下其代码规范,便于提高阅读其代码的效率。代码基于FreeRTO... 查看详情

转:带你玩转visualstudio——带你理解多字节编码与unicode码

上一篇文章带你玩转VisualStudio——带你跳出坑爹的RuntimeLibrary坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的一个地方,我们对它进行了总结和归纳。本篇文章我们将继... 查看详情

带你深入理解归并排序(代码片段)

归并排序文章目录归并排序一、合并两个有序数组二、递归版本三、性能分析四、非递归版本🎈🎆🎇前言:一、优先级队列堆PriorityQueue二、深入了解快排以及优化归并排序在八大排序中常考的次数,可以说... 查看详情

一篇文章带你深入理解zookeeper

随着互联网技术的发展,大型网站需要的计算能力和存储能力越来越高。网站架构逐渐从集中式转变成分布式。虽然分布式和集中式系统相比有很多优势,比如能提供更强的计算、存储能力,避免单点故障等问题。但是由于采用... 查看详情

带你轻松理解数据结构之map

前言初衷:最近在读《深入理解Es6》这本书,之前没好好全面学过Es6语法,也是趁着不忙的阶段重新好好阅读整理一下笔记分享给大家,不喜勿喷。适合人群:前端初级开发,大佬绕道。内容结构:认识Map->基础用法->应用... 查看详情

手摸手带你理解vue的computed原理(代码片段)

...。如果你对响应式原理还不是很了解,可以阅读我的上一篇文章:手摸手带你理解Vue响应式原理computed用法想要理解原理,最基本就是要知道如何使 查看详情

用一颗学美术的心来理解pid调节

...系,不管你是文科、理科、工科、艺术还是家里蹲的,这篇文章对你来说一定会简单到爆炸的。这种图(↑)大家都会画吧?什么?你不会?那这样的(↓)呢?我的天?你还不会?那我降低要求,给你支笔,让你对上面那张图涂颜... 查看详情

技术分享|4点带你快速理解ros2通信

在一个庞大的机器人系统中,通信是基础,是重中之重。如果连各个模板之间的通信概念都含糊不清,不能融会贯通。那么,对机器人的开发也会捉襟见肘。本文将会介绍ROS2中的通信基础概念和模型,包括节... 查看详情

通俗理解数据库隔离机制

...==========================================    原文链接: 通俗理解数据库隔离机制 转载请注明出处!===========================================    在理解数据库隔离机制的时候发现网上很多文章都是千篇一律,解释语... 查看详情

一篇文章带你深入理解comparable和comparator(代码片段)

每当实现一个对排序敏感的类时,都应该让这个类实现Comparable接口,以便其实例可以轻松的分类搜索,以及用于基于比较的集合中每当在comparTo方法的实习比较域值时,都要避免使用<和>操作符,而应该在... 查看详情

网络七层协议的通俗理解

...,OSI模型是从底层往上层发展出来的。 这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求。 需求1: 科学家要解决的第一个问题是,两个硬件 查看详情

osi七层模式简单通俗理解

...,OSI模型是从底层往上层发展出来的。 这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求。 需求1: 科学家要解决的第一个问题是,两个硬件之间怎么通信 查看详情

通俗理解非对称加密和对称加密

         阅读前请先看参考文章的内容,结合文章理解。为什么叫做对称加密和非对称加密         开始的加密方式,对称加密方式:甲乙双方使用的是同一套加密... 查看详情

阿里10年测试大佬带你搞懂测试左移和右移

...,对于测试左移和右移,有点不太懂,看了2篇文章,强行提笔总结了下,还有部分内容是直接翻译的。关于测试左移和右移。测试左移中提到了尽早的发现问题、以及持续集成、尽可能的实现自动化、更深的... 查看详情

通俗理解序列化的高级知识

...接口的对象,可以序列化为本地文件。那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题、静态变量问题、transient关键字的影响、序列化ID问题... 查看详情