当前位置: 首页 > news >正文

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.lryc.cn/news/384338.html

相关文章:

  • 杭州代理记账报税全程托管专业实力全面指南
  • PHP 界的扛把子 Swoole 异步通信利器
  • 40.连接假死-空闲检测-发送心跳
  • hdfs高可用文件系统架构
  • 从官方源码精简出第1个FreeRTOS程序
  • 谷歌上搞下来的,无需付费,可以收藏!
  • 宿主机无法通过ip连接wsl2解决方案
  • Ruby编程语言学习
  • Redis实战—基于setnx的分布式锁与Redisson
  • ARM功耗管理框架之LPI
  • Unity太空避障Demo总结
  • SpringSecurity-重写默认配置
  • C# 判断值是否在枚举里
  • Interview preparation--elasticSearch倒排索引原理
  • 银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址
  • python中不同维度的Tensor向量为何可以直接相加——广播机制
  • 38.MessageToMessageCodec线程安全可被共享Handler
  • Linux中的全局环境变量和局部环境变量
  • 【研究】AI大模型需要什么样的硬件?
  • 人工智能--自然语言处理NLP概述
  • 基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)
  • SpringCloud_GateWay服务网关
  • 使用Dropout大幅优化PyTorch模型,实现图像识别
  • Vue3中的常见组件通信(超详细版)
  • Stm32的DMA的学习
  • 应用安全(补充)
  • 鸿蒙开发Ability Kit(程序框架服务):【FA模型切换Stage模型指导】 app和deviceConfig的切换
  • 通过命令行配置调整KVM的虚拟网络
  • Apache POI操作excel
  • Python错误集锦:faker模块生成xml文件时提示:`xml` requires the `xmltodict` Python library