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

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.mzph.cn/bicheng/35578.shtml

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

相关文章

力扣1541. 平衡括号字符串的最少插入次数

Problem: 1541. 平衡括号字符串的最少插入次数 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 Problem: 力扣921. 使括号有效的最少添加 类似于上述题目,不过此时一个左括号要和两个右括号配对 1.同理上述题目,遍历字符串时若遇见一个左括…

揭秘微生物社区的“社交网络”:基因组规模代谢模型(GEMs)的新前沿

当前,微生物群落的基因组组成和功能潜力通过宏基因组组装基因组(MAGs)的分析得以部分揭示,但其内在的代谢网络和相互作用机制仍充满未知。为此,科学家们开发了基因组规模的代谢模型(GEMs)&#…

一码多址与同义词解决方案

随着地址库中的数据不断的丰富,地址库中一码多址和同义词的数据也会越来越多,一码多址和同义词在统一地址管理平台中的概念并不相同。 一码多址指的是多个地址编码相同,例如通过民政地址找到编码,再通过编码找到房产地址描述。 本…

怎么把不同的文件做成二维码?多种文件类型在线生码的制作方法

扫码来展示文件是现在很多场景下会使用的一种内容展示方法,这种方式能够简化其他人获取文件的流程,从而提升文件传播的效率,用户可以存储二维码,随时扫码查看文件内容。文件生成二维码支持多种类型的文件使用,比如ppt、…

信号与系统实验-实验五 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征,掌握在时域求解信号的各种变换运算; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法; 4、掌握利用 MATLAB 求解微分方程&a…

【数据库】Oracle安装报错(win10安装oracle提示环境不满足最低要求)

目录 一、问题场景: 二、问题描述 三、原因分析: 四、解决方案: 一、问题场景: 安装Oracle数据库 二、问题描述 安装之前提示( [INS-13001]环境不满足最低要求。 是否确实要继续? ) 如图所示&…

说出这11种API接口性能优化,面试官一定会对你刮目相看

前言 接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题。 这个问题既可以很简单,也可以相当复杂。 有时候,只需要添加一个索引就能解决。 有时候,代码需要进行重构。 有时候,必…

Vite: 集成Lint工具规范代码

概述 在前端开发中,尤其是在大型项目中,代码的规范性和一致性对于项目的可维护性、可读性以及团队协作效率至关重要。为了保障代码质量,前端社区涌现出了许多Lint工具,如ESLint、Prettier、Stylelint等,它们能帮助我们…

使用深度远程启动管理器配置BMC DHCP管理地址的方法

目录 1.请确保服务器BMC是DHCP状态,才可以使用深度工具分配地址;若BMC配置过静态地址,请使用静态地址登录; 2.配置好自己笔记本的 ip(例如:192.168.78.1),用网线与 ipmi 独立管理口…

Day46

Day46 手写Spring-MVC 解决Controller层的方案 思路:监听器在项目启动时DispatherServlet会将controller层的信息记录下来,当前端发送请求的时候DispatherServlet就会根据信息分发给controller层。 准备工作 准备工作的目的是准备好监听器,而…

AudioLM: 音频生成的革命性模型

AudioLM: 音频生成的革命性模型 AudioLM是一种革命性的音频生成模型,它结合了深度学习和自然语言处理的先进技术,能够生成高质量、逼真的音频内容。本文将探讨AudioLM的基本原理、工作机制、应用场景以及对音频生成领域的影响和未来发展方向。 一、Aud…

AI-智能体基础设施

个性化记忆需要世界模型来协助构建 业界有一个精简的Agent表达公示,即:Agent大模型(LLM)记忆(Memory)主动规划(Planning)工具使用(Tool Use)。基于该公式&am…

打破界限:Postman中CORS问题的终极解决方案

打破界限:Postman中CORS问题的终极解决方案 在当今的Web开发中,API跨域调用已成为常态。然而,浏览器的同源策略常常限制了这种跨域的自由。跨域资源共享(CORS)作为解决方案,允许不同源之间的资源访问。但如…

零信任价值获全面认可 新场景下展现无穷潜力

2023年,零信任在全球范围内持续快速发展,已经从新的安全理念发展成为云时代的主流安全架构,进入了全面普及期。 2023年,中国零信任市场同样涨势迅猛,产业生态越来越成熟,应用范围越来越广,应用…

模型微调DPO入门

一、定义 定义数据集格式llamafactory 训练案例入门文档阅读 二、实现 定义 DPO通过直接优化语言模型来实现对其行为的精确控制,而无需使用复杂的强化学习,也可以有效学习到人类偏好,DPO相较于RLHF更容易实现且易于训练,效果更好…

面试题-Redis简介

1.主流应用框架 概念: 穿透查询:数据库中的名词,与逐层查询不同,通过超链接可直接查询想要的结果,更加方便快捷 熔断机制:指软件系统中,由于某些原因使得服务出现了过载现象,为防止…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日,景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司,提供从数据采集、清洗、标注的全流程数据解决方案,协助人工智能企业解决整个AI链条中数据采集和数据标…

【面试题】SpringBoot面试题

目录 Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?如何理解 Spring Boot 中的 Starters?Spring Boot 的核心配置文件有哪几个?它们的区别是什么?Spring Boot、Spring MVC 和 Spring 有什么区别&#xff1f…

Maven高级的多环境配置与应用

多环境配置与应用 这一节中,我们会讲两个内容,分别是多环境开发和跳过测试 5.1 多环境开发 我们平常都是在自己的开发环境进行开发,当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,等测试人员测…

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容: 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…