STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

news2024/11/18 23:28:19

STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

  • 裸机开发与操作系统
  • 嵌入式操作系统简介
  • FreeRTOS简介
  • FreeRTOS的几个重要概念
    • 任务调度器
    • 任务状态
    • 状态列表

裸机开发与操作系统

在以往的嵌入式学习中,我们最常用的就是裸机开发,所谓裸机开发就是指在没有操作系统支持的情况下,直接使用裸机硬件的一种开发方式。在裸机开发中,我们往往会定义一个循环,比如while(1)来控制单片机循环内的代码,实现特定的功能;但是这样的方法存在一些问题:单片机始终受困于循环之中,虽说有各种各样的中断,让裸机开发能够应对一些较为复杂的场合,但是单片机始终无法摆脱单任务,简单应用的场合。
而操作系统的出现,则是准确的解决了裸机开发的痛点。最显著的就是让单片机不再局限于单任务,能够同时运行多个任务,处理更为复杂的任务,实现单片机芯片性能的释放。

以上为个人总结的出,操作系统具体介绍看下面:

嵌入式操作系统简介

嵌入式操作系统(Embedded Operating System)是专门设计用于嵌入式系统的操作系统,它通常运行在资源有限、功耗低、特定功能的硬件平台上,如微控制器、传感器节点、嵌入式设备等。与桌面计算机或服务器操作系统不同,嵌入式操作系统需要考虑更多的实时性、稳定性和功耗优化。

嵌入式操作系统的主要特点和功能包括:

  • 实时性:对于许多嵌入式应用来说,时间的准确性和响应速度至关重要。因此,嵌入式操作系统通常提供实时调度器,能够确保任务在指定的时间内完成。

  • 资源管理:由于嵌入式系统资源有限,嵌入式操作系统需要有效地管理内存、处理器时间、外设等资源。它们提供了资源分配和调度的机制,以便多个任务能够协同工作而不互相干扰。

  • 低功耗设计:嵌入式操作系统通常优化了功耗管理,能够有效控制设备在不同运行状态下的能耗,延长电池寿命或者减少能源消耗。

  • 实时操作:针对需要处理实时数据流或事件的应用,嵌入式操作系统能够确保及时响应和处理,如控制系统、传感器数据采集等。

  • 驱动程序支持:嵌入式操作系统提供了通用的设备驱动程序接口,简化了与硬件的交互,开发者可以通过API调用来访问和控制各种硬件设备。

  • 任务调度:多任务管理是嵌入式操作系统的一个重要功能。它能够管理多个任务的优先级、调度顺序以及任务之间的通信和同步。

  • 通信支持:许多嵌入式系统需要与外部设备或网络进行通信。嵌入式操作系统提供了通信协议和接口支持,如串口通信、网络协议栈等。

FreeRTOS是嵌入式操作系统的一种,也是我们要学习的内容:

FreeRTOS简介

FreeRTOS(Real-Time Operating System)是一个开源的实时操作系统内核,专为嵌入式系统设计。它提供了轻量级的多任务管理、任务调度、定时器、信号量、消息队列等功能,使得开发者能够在嵌入式设备上轻松实现复杂的应用程序。
主要特点:

  1. 开源和免费:FreeRTOS是开源项目,采用MIT许可证,可以免费用于商业和个人项目。这使得开发者可以自由地使用、修改和分发它,同时享受开源社区的支持和贡献。

  2. 轻量级和高效:FreeRTOS的内核设计非常精简,占用资源少,适合运行在内存和处理器能力有限的嵌入式设备上。其任务切换速度快,响应时间短,适用于对实时性要求高的应用场景。

  3. 多任务管理:FreeRTOS支持多任务管理,可以同时运行多个任务,每个任务有独立的任务优先级。开发者可以利用任务调度器(scheduler)来控制任务执行的顺序和时间片分配,实现复杂的并发控制和协同工作。

  4. 实时调度器:内置的实时调度器确保任务能按照优先级和预定时间执行,满足实时数据处理和响应的需求。这使得FreeRTOS特别适合需要及时处理事件或数据的应用,如工业控制、汽车电子等领域。

  5. 资源管理:FreeRTOS提供了丰富的资源管理功能,包括内存管理、任务间通信(如信号量、消息队列、邮箱等)、定时器和事件控制等。这些功能能够有效地管理和分配设备的有限资源,提高系统的效率和稳定性。

  6. 可移植性:FreeRTOS支持多种架构和开发板,如ARM、AVR、PIC等,以及多种编译器,如GCC、Keil、IAR等。这种广泛的支持使得开发者可以轻松在不同硬件平台上移植和使用FreeRTOS。

  7. 社区支持和生态系统:FreeRTOS拥有活跃的开发社区和生态系统,提供了丰富的文档、示例代码和技术支持。开发者可以通过社区获取技术支持、交流经验,加速开发过程。

总结下来就是:免费开源、简单好用、可移植性高、可裁剪、轻量级、使用广泛

FreeRTOS的几个重要概念

任务调度器

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务,FreeRTOS 一共支持三种任务调度方式:

  • 抢占式调度:主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。
  1. 高优先级任务,优先执行。
  2. 高优先级任务不停止(或者说是阻塞:任务内部在延时或者等待系统信号量等操作叫阻塞),低优先级任务无法执行。
  3. 被抢占的任务会进入就绪状态。
  • 时间片调度:主要针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。
  1. 同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期
  2. 同等优先级任务,轮流执行;时间片流转
  3. 一个时间片大小,取决为滴答定时器中断周期
  4. 当一个任务进入阻塞,但是时间片还没用完时,会直接进入下一个任务,且下一个任务的时间片长短不变。
  • 协程式调度:当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务,FreeRTOS现在虽然还支持,但是官方已经表示不再更新协程式调度,基本上不使用了。

任务状态

在FreeRTOS中任务一共有以下四种状态:

  • 运行态:正在执行的任务处于运行态,在STM32中,同一时刻只有一个任务处于运行态,之所以说FreeRTOS能够实现多任务,是因为单片机在很短时间内依次执行多个任务,由于一个时间片间隔很短,导致好像同时在运行多个任务。
  • 就绪态:表示该任务已经可以被执行,但是还没轮到它,处于就绪态
  • 阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态
  • 挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume()才可以进入就绪态
    在这里插入图片描述

只有就绪态的任务可以变成运行态!!!

状态列表

除了运行态之外,其他状态的任务都有一个任务列表

  • 就绪列表:pxReadyTasksLists[x] ,X表示优先级
  • 阻塞列表:pxDelayedTaskList
  • 挂起列表:xSuspendedTaskList

调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行 ,当所有任务处于同一个优先级时,会都在同一个就绪列表上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI开发Windows环境搭建

文章目录 1. GPU 支持检查2. 安装 Anaconda3. 创建 PyTorch 虚拟环境3.2 创建虚拟 PyTorchEnv 环境3.3 检查、激活、推出虚拟环境3.4 虚拟环境中python包管理3.5 虚拟环境中安装 PyTorch 框架 4. TensorFlow 安装 1. GPU 支持检查 打开 Task Manager (任务管理器)&…

使用VMware创建Ubuntu 24.04【一】

相关链接下载地址 VMware https://www.vmware.com/content/vmware/vmware-published-sites/cn/products/workstation-pro/workstation-pro-evaluation.html.html.html Ubuntu 24.04 LTS https://cn.ubuntu.com/download/desktop 虚拟机创建 1、打开VNware软件,点…

Qt小项目 | 实现迅雷设置界面

文章目录 一、手写代码实现迅雷设置界面 一、手写代码实现迅雷设置界面 使用Qt控件(如:QListWidget与QScrollArea等)与布局实现腾讯会议登陆界面。设置界面除基本设置界面外,其他界面都是以图片的形式嵌入到项目中并没有手写代码。…

Mac 如何安装 wget

1.安装 Homebrew2.安装 wget3.检测 wget 是否安装成功 1.安装 Homebrew 在安装 wget 之前需要安装一个适用于 mac 的包管理器 Homebrew,打开 mac 终端执行如下命令进行安装: /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/h…

DDD学习笔记二

模型的要素——用例、视图和构造块 模型的构建步骤 1)从用例场景开始,给模型输入概念、属性、术语。 2)构建静态领域模型(类图),发现领域概念和对象属性。 3)构建动态领域模型(时序图…

自动化物流控制系统WCS应用与异常处理

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载 WCS的定义与作用: 物流仓储设备…

数据预处理功能教程,上传文件生成知识库 | Chatopera

如何快速的生成高质量的知识库? 数据预处理功能教程 | Chatopera 云服务低代码定制聊天机器人 关于 Chatopera Chatopera 云服务重新定义聊天机器人,https://bot.chatopera.com 定制智能客服、知识库、AI 助手、智慧家居等智能应用,释放创新…

【Java中导出Excel导出多个sheet页】

Java中导出Excel导出多个sheet页 序言如何处理多个sheet页的导出期间遇到了一个sheet页相关的问题,以及解决办法多sheet页导出遇到,第二个sheet页的标题名称会把第一个的覆盖的问题 结语 序言 在日常工作中经常有导出数据文件的需求,避免不了…

华为云鲲鹏架构docker部署2048小游戏

华为云鲲鹏架构docker部署2048小游戏 1. 鲲鹏架构ESC2. 配置docker3. 上传2048镜像4. 删除容器,镜像 1. 鲲鹏架构ESC 2. 配置docker 安装dockeryum -y install docker开机启动 systemctl enable docker启动docker服务 systemctl start docker查询docker的运行版本 docker -v3…

嵌入式linux系统中面试过程经验分享

大家好,今天主要给分享一下,如何在面试中介绍自己的项目经验,希望对大家有所帮助。 在面试时,经过寒暄后,一般面试官会让介绍项目经验。常见的问法是,说下你最近的(或最拿得出手的)一个项目。 根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚…

【python】PyQt5信号与槽原理剖析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

大模型+多模态合规分析平台,筑牢金融服务安全屏障

随着金融市场的快速发展,金融产品和服务日趋多样化,消费者面临的风险也逐渐增加。 为保护消费者权益,促进金融市场长期健康稳定发展,国家监管机构不断加强金融监管,出台了一系列法律法规和政策文件。对于金融从业机构…

基于YOLOv5s的纸板缺陷检测(附数据集与Coovally操作步骤)

本文内容:以纸板缺陷检测为例操作的整个过程,从创建数据集到训练模型再到预测结果每个步骤进行可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 物流行业快速发展,对于网购的需求不断增大,随之而来的就是纸板制造…

Linux安装JDk教程

📖Linux安装JDk教程 ✅下载✅安装 ✅下载 官方Oracle地址:https://www.oracle.com/java/technologies/downloads/archive/ 123云盘:https://www.123pan.com/s/4brbVv-JdmWA.html ✅安装 1.上传安装包jdk-17_linux-x64_bin.tar.gz到指定位…

记一次elementui时间线的实现

实现效果 点击展开,每次累加五条数据进行展示 实现思路 起始本质上就是一个分页查询,只不过按新的形式展示,然后也不统计总数,每次只展示固定的5条数据点击加载更多,就展示下一页,页的页数进行1&#xff…

树莓派pico入坑笔记,uart使用

uart原理自行百度,相关内容很多其他博主写过并且质量很高,这里不再赘述。 调用circuitpy的busio模块来使用uart,除此以外,spi、iic等要需要使用该模块,使用方法见 官方教程 ,详细信息见文档 官方的例子简…

Mysql索引的实现原理,B+Tree,WAL

InnoDB 引擎,每一个数据表有两个文件 .frm和.ibd,分别为表结构,数据和索引,数据挂在主索引的叶子节点上,此主索引称为聚簇索引。 MyISAM 引擎,每一个数据表有三个文件.frm和.MYI和.MYD,分别为表…

Docker-compose 实现Prometheus+Grafana监控MySQL及Linux主机

. ├── Grafana │ ├── data │ └── docker-compose.yaml ├── Mysql │ ├── conf │ ├── data │ ├── docker-compose.yaml │ └── logs ├── Mysqld_exporter │ ├── conf │ └── docker-compose.yaml ├── node-exporter │…

使用新H5标签dialog,实现点击按钮显示分享链接弹出层交互功能

使用新H5标签&#xff0c;实现点击按钮显示分享链接弹出层交互功能 在现代网页开发中&#xff0c;使用新技术和标签来提升用户体验是非常重要的。今天&#xff0c;我们就来聊聊如何利用HTML5的<dialog>标签来实现一个简洁实用的分享链接功能。 在过去&#xff0c;我们通常…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架&#xff0c;它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能&#xff0c;Gin成为Go语言中最受欢迎的Web框架之一。 特点&#xff1a; 快速和轻量&#xff1a;Gin框架的设计注重性能和效率&#xff0c;采用了一些优化措…