“从0开始的FreeRTOS”系列教程第一讲

2023-05-16

大家好,这次给大家带来了Freertos的教程,这次打算一口气做完一整个系列的教程,大概更新频率会是月更

这个系列的教程的主要目的是带大家了解实时系统(real time operating system)的基本概念,熟悉freertos的api使用方法,具备基本的使用rtos进行工程开发的能力

系列计划分几期录完,内容分别为

  • 任务管理
  • 队列管理
  • 软件定时器管理
  • 中断管理
  • 资源管理
  • 事件组
  • 任务通知

本教程的开发环境:

  • 硬件环境
    stm32f103ZET6
  • 软件版本
    Keil MDK 5.23
    CubeMX 4.17
  • 软件库环境
    HAL库版本1.13.0
    FreeRTOS版本9.0

我们这节课主要解决两个问题:

  1. 什么是RTOS?
  2. 为什么要用RTOS?

第一个问题:什么是RTOS(Real time operating system 实时操作系统),在回答这个问题之前,我们先说明白什么是OS(Operating system 操作系统)。

我们正常使用电脑时感觉和使用单片机有很大的差距,在单片机上,我们可以直接调用IO,中断这些硬件功能,但是在电脑时,我们只能够通过一些应用程序与计算机进行交互。

这是因为我们在操作单片机时是在直接和单片机的硬件进行交互,而在使用电脑的时候,实际上我们是和操作系统进行交互,然后操作系统再帮我们完成和硬件交互的过程,用专业一点的方法来说,就是操作系统区分了用户态和内核态,涉及硬件的操作,只能在内核态下由操作系统进行访问,而用户则只能在用户态进行操作。

操作系统本身就像套在硬件外面的一层壳一样,我们用户再在操作系统的外层进行用户应用的开发,用户应用通过操作系统去操作硬件。

而实时操作系统也是操作系统的一种。

实时操作系统相比一般的操作系统会更加强调实时性,相比我们平时使用的操作系统更加注重及时响应用户的输入,实时操作系统的重点是在外界时间或者数据产生时,能够快速接收和处理,处理的结果又能在规定的时间做出响应。

实时操作系统一般用在工业控制,军事设备,航空航天这些对实时性要求强的场景中。

图1-1

在stm32开发时,我们一般会采取裸机开发的方式,所谓裸机是指我们一般的轮询+中断的工程代码构筑方式,我们能够实现比较复杂的任务的手段主要是通过中断优先级和中断嵌套。而且这些工作的完成是依赖于nvic寄存器,也就是完全以硬件的方式完成的。

但我们也可以通过freertos这样的实时操作系统进行开发,也就是我们创建一些用户进程,由操作系统根据我们之前设定好的需求对进程的运行进行管理,这是一种通过软件对任务进行调度的方式。

当然,我们上面讲的并不是操作系统的全部,实际上操作系统的历史发展和多道程序设计技术密切相关,但这些不是我们这里的重点了

第二个问题,为什么要用rtos:
使用rtos最大的优势是避免由于不定长中断引发的问题,在传统的裸机开发时,有的时候会因为过长等待一个中断的触发,或者过长时间处理一个中断,导致整个系统发生了混乱乃至于崩溃。

而在rtos中,我们可以通过灵活的调度机制避免这种问题

另外RTOS会给每个任务分配固定的任务栈,并在发生栈溢出时进行处理,避免了由于栈溢出导致系统崩溃的风险

此外使用rtos还有便于实现软件接口等一些优势,比如在移植工程时,如果是裸机开发,我们就要重新配置中断,而如果是rtos,我们直接将用户进程拷贝过来就能使用了,免去了重新进行硬件配置的麻烦

最后,在非常复杂的大工程,以至于完全基于中断进行设计几乎不可能时,使用rtos进行任务调度会是很好的选择

我们这次教程要介绍的FreeRTOS就是RTOS的一种,其他比较常见的还有uCOSⅡ,eCos,都江堰等实时操作系统,FreeRTOS正如其名,是一个’free’的rtos,它的源码和文档可以免费从官网上面获取。

选择FreeRTOS作为我们这次教程讲解的对象,一方面是因为可以通过CubeMX很轻松的生成一个包含FreeRTOS的32工程。另一方面,FreeRTOS已经是一个应用范围很广,占有率很高,社区很庞大的实时操作系统了。

图1-1

在下一期教程里,我会给大家介绍一下freertos的源码结构,用cubemx生成包含freertos的工程的方法,以及工程的组件。

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

“从0开始的FreeRTOS”系列教程第一讲 的相关文章

  • fedora20安装putty No package ‘gtk+-2.0′ found

    这里转载一下 我在编译安装emacs23的时候提示No package gtk 43 2 0 found centos的开发环境 网上搜了一下 xff0c 发现安装gtk 43 2 0不是一件容易的事 xff0c 后来无意发现一个帖子挺不错
  • Reverse Words in a String

    Given an input string reverse the string word by word For example Given s 61 34 the sky is blue 34 return 34 blue is sky
  • Linked List Cycle

    Given a linked list determine if it has a cycle in it Follow up can you solve it without using extra space 最初代码 xff0c 错误
  • Linked List Cycle II

    Given a linked list return the node where the cycle begins If there is no cycle return null Follow up Can you solve it w
  • Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation Valid operators are 43 Each operand may be an
  • Insertion Sort List

    Sort a linked list using insertion sort 对一个线性链表排序 xff0c 维护两对指针即可 ListNode insertionSortList ListNode head if head return
  • mac上忘记mysql密码完美解决方案

    最近项目用到mysql xff0c 之前装过一个 xff0c 可是忘记了当时设置的密码 xff0c 然后走上了修改密码的坎坷道路 在百度 xff0c Google了一堆资料之后还是 xff0c 发现处处是给程序员埋的坑 于是下决心 xff0
  • Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 网络编程概述

    今天开始正式学习网络编程这一块 xff0c 特做此笔记记录学习过程 要编写通过计算机网络通信的程序 xff0c 首先要确定这些程序相互通信所用的protocol 在深入设计一个协议的细节之前 xff0c 应该从高层次决断通信由哪个程序发起以
  • unix网络编程(二)Tcp:传输控制协议

    1 TCP xff08 Transmission Control Protocol xff0c 传输控制协议 xff09 xff0c 其提供一下服务 xff1a 一 xff09 TCP提供客户与服务器的链接 xff0c 一个客户建立与一个给
  • TIME_WAIT状态

    在Tcp关闭连接过程中 xff0c 主动关闭的一段会进入TIME WAIT状态 xff0c 且在该状态持续两倍最长分节生命期MSL的时间 Tcp实现中必须选择一个MSL xff08 maximum segment lifetime xff0
  • 《Unix环境高级编程》学习笔记--文件和目录-1

    unix环境高级编程 学习笔记 1 unix环境高级编程学习笔记 1 12 文件长度13 文件截断 4 12 文件长度 文件的长度由stat结构的st size表示 xff0c 以字节为单位 符号链接 xff0c 文件长度为文件名称中的实际
  • GLIBC_2.14’ not found

    usr local mysql bin my print defaults lib64 libc so 6 version 96 GLIBC 2 14 not found问题解决方案 转载site http blog csdn net do
  • CMMI2.0之我见-验证和确认VV&同行评审PR

    编者按 xff1a CMMI2 0之我见系列将通过系列文章形式介绍CMMI2 0所涉及到的其中20个实践域 xff0c 笔者将通过系统性的梳理 浅显易懂的文字描述 xff0c 同时结合笔者的思考和观点 xff0c 对每个实践域的目标以及所基
  • Python数据可视化之Matplotlib-技巧篇

    常用技巧 特殊直线 画出过特定点的无穷直线 xff0c 可以用 axline 来实现 确定平面直线 xff1a 两个不同的点或者一个点和斜率 语法 xff1a plt axline xy1 xy2 61 None slope 61 None
  • IDEA怎么复制错误信息

    方式一 xff1a 鼠标放在该提示上 xff0c 然后选中 xff0c 选中时不要松开鼠标左键 xff0c 同时按ctrl 43 c复制即可 方式二 xff1a 点击错误信息 xff0c 在IDEA最下栏会显示错误信息 xff0c 可以点击
  • commonJs和es6的区别

    commonJs 示例 span class token comment 导入 span span class token keyword const span valid span class token operator 61 span
  • 基于51单片机的蜂鸣器及简谱的学习(编曲)

    目录 文章目录 前言 一 蜂鸣器 1 无源蜂鸣器原理图 2 集成电路驱动 xff08 五线四项步进电机 xff09 3 三极管驱动 编辑 4 应用电路 4 控制原理 二 乐律部分 1 键盘与音符的对照 编辑 2 音符与频率对照表 总结 前言
  • mysql 创建超级用户

    mysql gt GRANT ALL ON TO 39 dbuser 39 64 39 39 IDENTIFIED BY 39 123456 39 WITH GRANT OPTION Query OK 0 rows affected 0 0
  • 环境类传感器介绍

    经过前几篇的原理讲解 xff0c 大家对市面上类似气体 PM2 5 火焰呀这类传感器有一定的了解 xff0c 但是到采购环节就迷茫了 xff0c 毕竟市面上的产品五花八门 xff0c 挑的眼花缭乱 xff0c 今天给大家介绍几款简单的传感器

随机推荐

  • 速腾聚创 RoboSense RS-Helios 32线激光雷达使用 LeGO-LOAM 算法建图

    实验室无人机平台及相关应用 激光雷达SLAM建图 目录 实验室无人机平台及相关应用激光雷达SLAM建图1 1 RoboSense RS Helios 32线激光雷达配置与使用1 1 1 网口配置激光雷达1 1 2 配置ROS开发环境1 1
  • 实验室无人机平台 Pixhawk 2.4.8 / PX4 v1.9.2

    实验室无人机平台及相关应用 无人机平台 目录 实验室无人机平台及相关应用无人机平台1 硬件1 1 无人机本体1 1 1 四旋翼无人机机架1 1 2 Pixhawk 2 4 8 飞控板1 1 3 电调1 1 4 分电板1 1 5 锂电池1 1
  • vnc客户端无法登陆提示Too many security failures

    vncviewer客户端提示 xff1a Too many security failures mac下的 屏幕共享 提示 xff1a 远程电脑上的软件似乎与此 屏幕共享 版本不兼容 查看服务端端口监听正常 解决方法 xff1a 重置黑名单
  • 如何使用WINSCP连接windows服务器

    非常有用 xff01 xff01 xff01 xff01 xff01 xff01 前沿 winscp是一款非常好用的文件传输工具 xff0c 但往往在windows系统上 xff0c 使用是SFTP模式会出现无法连接的情况其最主要的原因 x
  • 树莓派安装Pandas

    使用pip安装 xff0c 网络问题失败 root 64 raspberrypi span class token operator span usr span class token operator span lib span clas
  • seurat自学笔记1.0 单细胞数据导入

    Python读取 h5ad文件 import anndata import pandas as pd adata 61 anndata read 34 home R R data Seurat PBMC10 output adata h5a
  • 实验室工作站配置多用户远程连接教程(亲测有效版)

    系统版本 xff1a win10 Step1 用户配置 1 1 新建用户 右键此电脑 rightarrow 管理 rightarrow 本地用户和组 右键
  • linux下ftp用wput上传目录

    ftp的put貌似不支持put目录 xff08 谁知道怎么put目录 xff1f xff09 wput可以put目录 xff0c 使用也简单 wput home test ftp ftpusername password 64 ip tes
  • bash中!和#的问题

    size 61 medium 今天执行一条shell命令 xff0c 其中包含了 64 总之是有一段以 开始 xff0c 结果报错event not found 不解 xff0c 查了shell相关资料了解到bash Shell脚本 xff
  • Windows蓝屏代码详解

    size 61 medium Windows蓝屏密码 xff01 补全版 ZT 格式是 xff1a xff08 0x0000 操作已成功完成 0x0001 错误的函数 xff09 1 停止错误编号 0x0000000A 说明文字RQL NO
  • 制作启动U盘加载阵列卡驱动

    size 61 medium 安装服务器时碰到没有阵列卡驱动无法安装的问题大家应该都碰到过 之前一次安装2003碰到没阵列卡驱动 xff0c 解决的办法比较土 xff0c 上网下了张别人做好的集成了raid驱动的2003 这次不行了 xff
  • xfs文件系统优化

    size 61 medium 网上搜集的xfs文件系统优化方案 xff0c 自己做个小结 b 先贴出优化前后的对比 xff0c 只是简单的用dd命令测试了一下而已 xff0c 不怎么专业 写和读的文件为内存2倍 b size code 61
  • Fusion-io的吸引力:高读写能力与低延迟

    fusion io ssd硬盘的性能 url http sapling me hardware fusion io html url
  • 转:python的socket编程

    python socket编程简介 xff1a python 编写server的步骤 xff1a 1 第一步是创建socket对象 调用socket构造函数 如 xff1a socket 61 socket socket family ty
  • TIME_WAIT连接过多的解决

    netstat n awk 39 tcp 43 43 S NF END for a in S print a S a 39 LAST ACK 1 SYN RECV 164 CLOSE WAIT 3 ESTABLISHED 655 FIN W
  • MySQL更改root密码

    情况一 记得root密码 用SET PASSWORD命令 1 打开终端win 43 r输入cmd回车即可打开 xff1b 2 通过mysql u用户名 p指定root用户登录MySQL xff0c 输入后回车会提示输入密码 3 修改MySQ
  • mac下控制台可以搜索到命令但是vscode显示zsh: command not found:

    记录下吧 困扰几天了 xff0c mac怎么这么难安这些环境变量什么的啊哈哈哈 node npm都是能搜到的 在控制台全局安装了yarn xff0c 控制台可以yarn v命令 xff0c 但是vscode报错zsh command not
  • 1.机器学习sklearn-------聚类

    1 sklearn简介 Scikit learn 也简称 s klearn 是机器学习领域当中最知名的 python 模块之一 sklearn库共分为6大部分 xff0c 分别用于完成分类任务 回归任务 聚类任务 降维任务 模型选择以及数据
  • KEIL编译报错,解决方法汇总

    目录 背景 最近在跟着野火码uCosiii的代码时 xff0c 感觉非常完美 xff0c 结果一编译 xff0c 报了120个莫名其妙的问题 xff0c 下面是踩过的坑 xff0c 一起记录下 xff0c 免得下次又掉进去了 1 编译汇编文
  • “从0开始的FreeRTOS”系列教程第一讲

    大家好 xff0c 这次给大家带来了Freertos的教程 xff0c 这次打算一口气做完一整个系列的教程 xff0c 大概更新频率会是月更 这个系列的教程的主要目的是带大家了解实时系统 real time operating system