RTOS 和裸机系统的异同-基于 ESP32 学习双核 FreeRTOS 的使用

2023-05-16

Learning-FreeRTOS-with-esp32

什么是 RTOS

其本质上是运行在小型嵌入式设备上的特殊软件-系统软件。如同手机的安卓系统软件、windows 系统软件。

RTOS VS 裸机系统

传统的裸机系统(无操作系统)其内部是一个前后台系统,其中前台程序主要是中断服务程序组成,管理系统标识,后台程序为一个主循环,通过一遍一遍地查询系统标识,执行对应的代码块:
在这里插入图片描述
在裸机系统中经常存在下面的问题:

case1: 触发 isr1 后就会执行 code2,即便 isr2 发生,也要先执行完 code2 ,再执行 code3,对 code3 的实时响应造成影响。

case2: 在执行 code3 时,若 isr1 发生,系统不能及时地切换到其他 code,需要重新轮询到对应的系统标识后才能执行对应的 code,CPU 没有及时用到重要的事情上。

因此,裸机系统的缺点是,CPU 利用率底,各个事件的实时性差、缺乏规范的通信组件、开发者必须以轮询、前后台响应的思路进行编程,往往需要彻底地了解整个系统才能写出合适的代码(与硬件的隔离性差),开发难度大。

RTOS(Real Time Operating System, 实时操作系统简称RTOS,是一种通用的、规范的任务管理框架,用于控制任务的运行和任务之间、任务与中断之间的合作关系。通过 RTOS,程序可以兼容复杂的系统组件,用户也不必理解设备硬件的全部知识就可以快捷地调用设备的各种功能,实现系统集成。

RTOS 操作系统的核心功能是:自动管理 CPU 的使用权,最大化 CPU 的利用率,使得操作系统内的每个任务(进程\线程)都能在一定时间内及时的获取 CPU 的使用权,就像多个任务“同时在运行”一样:
在这里插入图片描述
以在手机上看小说和听音乐为例子,逻机系统更适合实现先看小说、再听音乐这种简单的逻辑,而带操作系统的设备则更容易实现边听音乐边看小说的逻辑。再以拍照+美颜为例,逻机系统更适合先拍照再把图片进行美颜的逻辑,而带操作系统的设备则更容易实现拍照时直接将美颜效果呈现在屏幕上的逻辑,因为后者可以使用RTOS提供的通信组件将数据实时地传递给美颜的处理程序。

RTOS 提供了哪些功能

RTOS 提供了任务管理、资源访问控制、消息通信、存储管理、低功耗管理等的功能:
在这里插入图片描述
通过 RTOS 将提供系统管理的功能,开发者只需调用相关的 API 就可以立即知道系统的情况,创建执行特定功能的代码、代码之间的通信、集成复杂的协议栈,开发复用性高的代码都将变得简单。

为什么要学习 FreeRTOS

FreeRTOS 是非常流行的多任务操作系统。相比其他 RTOS 操作系统,FreeRTOS 具有用户多、免费、组件丰富的优点。通过学习这一典型的操作系统,可以融会贯通地掌握其他 RTOS 系统,对更高级的操作系统如 linux 的学习也是很有帮助的。

为什么使用 ESP32

ESP32 便宜且功能丰富,除了可以学习标准的 FreeRTOS 功能外,乐鑫还开发了 FreeRTOS 的更多功能,如 RingBuffer,双核结构下 FreeRTOS 的使用等。除此之外,使用 ESP32 还可以学习各种外设和网络通信的知识。开源生态也不错,示例代码和开发人员众多。

课程介绍

该课程以问题案例为核心,以实际开发需求为案例,循序渐进地讲述开发过程中可能面临哪些问题及需求。通过实践代码,掌握编程思想。目前规划的内容可分为下述几点:

  • RTSO 基础篇-了解 FreeRTOS 的核心-任务的创建与使用。

  • RTSO 基础篇-任务间的同步与消息通信

  • RTSO 基础篇-任务之间的共享资源及共享资源的保护策略

  • RTOS 中断篇

  • RTOS 时间管理篇

  • RTOS 内存使用策略篇

  • RTOS 系统篇 资源管理模式

  • RTOS 系统篇 特殊任务、任务看门狗使用策略

  • RTOS 下驱动开发示例

  • RTOS 下系统编程示例

更新计划

普普通通打工入,准备日更至少一篇(共计约七十篇)。2022 年底前更新完毕。

写这些也是为了督促自己学习总结,和各位工程师同学互勉。

使用说明

关于硬件:任意一款 ESP32 开发板+若干杜邦线即可。

关于软件:思考再三,还是使用 C 语言进行开发。作商用的项目,把设备的性能挖掘到极致,还得是 C 语言这把锋利的小刀。

编译环境安装教程

本课程的示例均基于乐鑫开源的开发环境 ESP-IDF\v4.4 进行演示。关于编译环境的搭建,你可以参考:

  1. ESO-IDF 编程指南-Get Start

  2. ESP-IDF 国内 gitee 网站

  3. ESP-IDF 论坛
    建议使用 ubuntu 的开发环境,因为 ubuntu 下编译的更快。

    建立开发环境后,向编译 hello_world 一样进入各个示例编译程序运行,并观察 log 信息就可以了。

参考资源

  1. FreeRTOS 官方开发者指南
  2. FreeRTOS 官方 API 说明文档
  3. 乐鑫 FreeRTOS API 说明、新增特性说明
  4. 我的博客
  5. 我的代码

获取代码

  1. 点击代码仓库页面的克隆/下载按钮,下载压缩包获取代码更新:
    在这里插入图片描述
  2. 使用 git 获取代码更新
    如果你已经熟悉使用 git,可以执行下述命令获取仓库代码:

git clone https://gitee.com/yx_wang/learn_freertos_with_esp32

后续你可以使用下述命令获取更新:

git pull origin master

如果你还不熟悉如何使用 git,我建议你谷歌\百度一下如何安装 git,如何使用 git。熟悉 git 对于提高技术人员的技术水平非常有帮助,一开始你不需要了解 git 的方方面面,边用边学就可以了。

学习建议

  1. 学会利用网络,随时查看相关函数的说明、用法、注意事项。
  2. 参考博客的说明进行思考,编译运行程序、并尝试改写程序验证自己的想法。
  3. 如何使用 API 并不重要,认真体会每个组件、每个问题、每次改进所涉及的因与果,形成自己的编程心得。
  4. 真正地掌握一个知识是需要努力和汗水的,极少有可以让你轻松掌握的知识。坚持看完整个示例,你的系统编程思维、C语言知识都会得到锻炼!!!

注意事项

  1. 在学习该课程前,请至少保证已经熟悉 C 语言的基本用法,如果没有请暂停课程的学习,先补充基本的C 语言知识,再开始学习。
  2. 请确保你真的尝试了解过什么是 RTOS,比如百度或者谷歌它。
  3. 建议你使用一块真的开发板来学习嵌入式相关的知识。
    下一篇:RTOS 基础篇 创建第一个任务
    谢谢点赞或收藏。
    (未经允许,请勿裁剪文章并转载)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTOS 和裸机系统的异同-基于 ESP32 学习双核 FreeRTOS 的使用 的相关文章

随机推荐

  • 学习一下freertos streambuffer

    学习一下freertos stream buffer 最近在自己从0到1写rtos xff0c 主要是为了学习rtos xff0c 并没有其他卵用 xff0c 光学会调API是不够的 xff0c 看源码又恼火 xff0c 所以学习的最好办法
  • Writable接口

    在org apache hadoop io中 xff0c hadoop使用自己的序列化格式Writables接口 xff0c 具有紧凑 xff0c 快速的特点 xff0c 不过目前只有用Java才能较容易扩展 在hadoop中 xff0c
  • 解决数据库连接慢问题

    解决数据库连接慢问题方法 xff1a 方法一 连接数据库时 xff0c 使用localhost xff0c 不要使用明确的IP地址 xff08 远程数据库除外 xff09 xff1b 方法二 在my cnf配置文件里 xff0c 添加ski
  • 难忘的2011

    前言 xff1a 这些年 xff0c 每到年终之时 xff0c 我都会写个总结 2009年的 优化生活 规划未来 记录了一位初级网络优化工程师09年的所想与所做以及对10年的规划与展望 xff1b 2010年的 今天的2010 xff0c
  • QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)

    MFC版本的从字体名获取字库文件路径点击此处 最近弄的一份项目需要裁剪ttf字库 xff0c 故需要用到此功能 xff01 用了几年QT xff0c 个人感觉类库是非常强大的 xff01 QT相比VS的话亮点在开源的类库非常的丰富 xff0
  • C++编写分形问题

    目的 xff1a 递归是基本的算法思想和设计方法之一 xff0c 也是数据结构重点讲授的部分 xff0c 是许多算法的基础 xff0c 对它们的理解和运用直接关系着其他算法的理解和应用 因此 xff0c 熟练掌握递归是十分重要的 通过本题
  • MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)

    上一篇有讲到在QT中从字体名获取文字的路径 xff0c 这个是MFC版本的 xff1a QT从字体名获取字库文件路径 include lt string gt using namespace std void wcharTochar con
  • 如何在 IntelliJ IDEA 中快速生成 JavaDoc 注释模板

    笔者的工作环境 xff1a IntelliJ IDEA 2021 2 2 Ultimate Edition JDK 17 使用 IntelliJ IDEA 中的实时模块可以快速生成 JavaDoc 注释 方法如下 xff1a xff08 I
  • FYI,PFA

    FYI For Your Information 供您参考 PFA please find attached 请参看附件
  • ArcGISEngine10.0安装后因为授权问…

    ArcGISEngine10 0 安装后因为授权问题无法使用 xff0c 添加控件提示错误 例如 xff1a 创建组件 ToolbarControl 失败 错误消息为 xff1a System ComponentModel LicenseE
  • 关于transition-group报错children must be keyed: div

    学习项目时遇到了这个报错 原来的写法 lt div v for 61 34 ball in balls 34 v show 61 34 ball show 34 class 61 34 ball 34 gt lt div class 61
  • 为什么老板对项目时间安排的永远是那么的紧?

    简单分析一下 xff0c 原因基本上也就这么两点 xff0c 一方面 xff0c 可以压缩你的时间 xff0c 大家都知道时间就是公司的最大成本 xff0c 用的时间越少 xff0c 带来的价格也就越高 1年完成的项目 半年提前完成 xff
  • GCC NOT FOUNT

    错误提示 xff1a arm linux gcc Command not found 原因 xff1a 1 xff09 没有在 bashrc 或者 etc environment中添加交叉编译工具链bin文件路径 解决方法 xff1a 使用
  • 记录个人编译DCNv2的过程(windows 10,vs2019, torch1.7.0)

    小白一个 xff0c 因为配FairMOT环境需要用到DCNv2 xff0c 就简单记录一下自己遇到的问题和解决方法 如有错误 xff0c 请多指教 首先主要参考了博客https blog csdn net Ningmoua article
  • 初识CMMI2.0

    初识 CMMI2 0 xff08 以下内容根据网络知识学习和整理而成 xff09 正式发布与获取 xff1a 2018 年 3 月 8 日 xff0c CMMI2 0 正式版本正式上线全新的主页 xff08 https cmmiinstit
  • C++编写杨辉三角

    xff08 1 xff09 美观很重要 xff0c 哈哈哈 include lt iostream gt include lt iomanip gt using namespace std int YangHuiData int n n是杨
  • IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的

    IP地址类型 最初设计互联网络时 xff0c 为了便于寻址以及层次化构造网络 xff0c 每个IP地址包括两个标识码 ID xff0c 即网络ID和主机ID 同一个物理网络上的所有主机都使用同一个网络ID xff0c 网络上的一个主机 包括
  • iscsiadm命令基本用法

    发现目标 iscsiadm m discovery t sendtargets p 192 168 1 1 3260 m discovery 指定模式为discovery p 192 168 1 1 3260 指定目标ip和端口 登入节点
  • linux内核中的睡眠函数*delay、*sleep

    目录 一 睡眠函数种类 1 原子上下文 2 非原子上下文 二 使用环境 1 使用环境的不同 xff0c 选择不同的延时 2 驱动机制不同 3 内核中的计算函数执行的函数 三 实测两类函数的延时以及原因 1 测试系统中的睡眠函数 2 输出结果
  • RTOS 和裸机系统的异同-基于 ESP32 学习双核 FreeRTOS 的使用

    Learning FreeRTOS with esp32 什么是 RTOS 其本质上是运行在小型嵌入式设备上的特殊软件 系统软件 如同手机的安卓系统软件 windows 系统软件 RTOS VS 裸机系统 传统的裸机系统 xff08 无操作