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

STM32 FreeRTOS 介绍

目录

什么是裸机开发

什么是操作系统

通用操作系统

实时操作系统

FreeRTOS简介

FreeRTOS发展历史

FreeRTOS优势

FreeRTOS特点


什么是裸机开发

裸机开发指的是在没有操作系统(OS)或者其他高级软件支持的情况下,直接在裸机硬件上进行软件开发的过程。在裸机开发中,开发者需要直接面对硬件层面的操作和控制,而不依赖于任何操作系统提供的抽象层或者服务。

这就像手动操纵一辆汽车,想开车从城市A到城市B,你需要了解汽车的每个部件,掌握如何驾驶,包括油门、刹车、方向盘等。你需要手动决定何时加速、何时刹车、何时转弯。这就好比裸机编程,开发者需要亲自管理每个硬件资源,编写所有的控制逻辑。

什么是操作系统

一个计算机系统可以大致分为三个部分:硬件(Hardware),操作系统(operating system),应用程序(application programs)。过去也可以分为两层:软件和硬件。

(1)硬件包含了芯片,存储空间,输入输出等设备为整个系统提供了基础的计算资源。

(2)操作系统是一个控制程序,作为硬件和应用程序之间的桥梁,主要是和硬件打交道,负责协调分配计算资源和内存资源给不同的应用程序使用,并防止系统出现故障。面对来自不同应用程序的大量且互相竞争的资源请求,操作系统通过一个调度算法和内存管理算法尽可能把资源公平且有效率地分配给不同的程序。

(3)应用程序则通过调用操作系统提供的API接口获得相应资源完成指定的任务。

操作系统从整体上分为两大类:通用操作系统实时操作系统

通用操作系统

通用操作系统包括Linux,Windows,MACOS等主流的操作系统。这些操作系统大家每天都在使用,功能也十分强大,只是它们有时为了保障系统的流畅运行,就不能保证每个程序都能实时响应,在易用性和实时性之间有所取舍。而且单片机有限的片上资源也不足以支撑通用操作系统的运行。

实时操作系统

实时操作系统(RTOS-Real Time Operating System)中实时(Real Time)指的是任务(Task)或者说实现一个功能的线程(Thread)必须在给定的时间(Deadline)内完成。

拓展:进程表示运行过程的程序。对进程进行子程序(线程),然后CPU进行调度,而在实时系统中不分进程和线程,总称为任务。

人们总有种误解认为如果能堆砌更多的处理器核心数目,更高的处理器频率,更大的内存,更快的总线速度系统就一定能达到实时性。然而事与愿违强大的计算能力并不能保证系统的实时性。举一个简单的例子比如汽车中的安全气囊,在传感器检测到汽车发生碰撞后,安全气囊需要在30ms内完全打开,不然司机和乘客的人身安全将受到极大的威胁。倘若车载ECU有很强大的计算能力,但是如果因为要执行其他复杂计算任务或者任务调度的问题导致对汽车异常状态的监测和安全气囊的响应时间超过了规定的时间,系统实时性将无法得到保障从而导致系统失效和人员伤亡,这将会是非常严重的问题。

为了保障这些实时任务能在给定的时间内完成,需要一个实时系统对这些任务进行调度和管理。一个实时操作系统能尽力保障每个任务的运行时间在规定时间内完成,这包括

(1)对中断和内部异常的处理

(2)对安全相关的事件的处理

(3)任务调度机制等

正所谓术业有专攻,在嵌入式领域中,嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,从而更好地保证系统的实时性和可靠性。

目前比较流行的实时操作系统包括黑莓QNX,FreeRTOS,uCOS,RT-Thread等

FreeRTOS简介

RTOS(实时操作系统)是指一类系统,如 FreeRTOS,uC/OS,RTX,RT-Thread 等,都是 RTOS 类操作系统。FreeRTOS:Free翻译自由的意思,这里指源码的意思。

FreeRTOS是所有实时操作系统中最受欢迎的一款.

FreeRTOS发展历史

FreeRTOS 由美国的 Richard Barry 于 2003 年发布。

FreeRTOS 于 2017 年被亚马逊收购,改名为 AWS FreeRTOS。

FreeRTOS优势

FreeRTOS 是市场领先的面向微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,现在每 170 秒下载一次。

FreeRTOS 通过 MIT 开源许可免费分发,包括一个内核和一组不断丰富的 IoT 库,适用于所有行业领域。FreeRTOS 的构建突出可靠性易用性

FreeRTOS是一款受欢迎、广泛应用于嵌入式系统的RTOS,其开源、轻量级、可移植的特点使其成为许多嵌入式开发者的首选,主要优势如下:

Ø 开源和免费:FreeRTOS是一款开源的RTOS,采用MIT许可证发布,可以免费使用、修改和分发。

Ø 轻量级设计:FreeRTOS注重轻量级设计,适用于资源受限的嵌入式系统,不占用过多内存和处理器资源。

Ø 广泛应用:FreeRTOS在嵌入式领域得到广泛应用,包括工业自动化、医疗设备、消费电子产品、汽车电子等。

Ø 多平台支持:FreeRTOS的设计注重可移植性,可以轻松地移植到不同的硬件平台,支持多种处理器架构。

Ø 丰富的功能:提供了多任务调度、任务通信、同步等功能,适用于复杂的嵌入式应用场景。

FreeRTOS特点

官网:FreeRTOS™ - FreeRTOS™,并且支持中文。

Ø 任务调度:FreeRTOS通过任务调度器管理多个任务,支持不同优先级的任务,实现任务的有序执行。

Ø 任务通信和同步:提供了队列、信号量等机制,支持任务之间的通信和同步,确保数据的安全传递。

Ø 内存管理:提供简单的内存管理机制,适用于嵌入式环境,有效利用有限的内存资源。

Ø 定时器和中断处理:支持定时器功能,能够处理中断,提供了可靠的实时性能。

Ø 开发社区:拥有庞大的用户社区,开发者可以在社区中获取支持、解决问题,并分享经验。

Ø 可移植性:设计注重可移植性,可以轻松地移植到不同的硬件平台,提高了代码的重用性。

相关文章:

STM32 FreeRTOS 介绍

目录 什么是裸机开发 什么是操作系统 通用操作系统 实时操作系统 FreeRTOS简介 FreeRTOS发展历史 FreeRTOS优势 FreeRTOS特点 什么是裸机开发 裸机开发指的是在没有操作系统(OS)或者其他高级软件支持的情况下,直接在裸机硬件上进行软…...

在 Azure 100 学生订阅中新建 Ubuntu VPS 并部署 Mastodon 服务器

今天想和大家分享一下如何在 Azure 的 100 学生订阅中,创建一台 Ubuntu VPS,并通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台,允许用户创建自己的实例,类似于 Twitter,但更加去中心化。Docker…...

【Linux网络编程】序列化与反序列化

目录 一,序列化和反序列化的说明 二,Jsoncpp库的介绍 三,Jsoncpp库的使用 3-1,Json::Value类 3-2,Json::StreamWriter类 3-3,Json::CharReader类 一,序列化和反序列化的说明 序列化与反…...

Spring Boot中的自动配置原理是什么

Spring Boot 自动配置原理 Spring Boot 的自动配置机制基于 条件化配置,通过 EnableAutoConfiguration 注解来启用。自动配置的核心原理是 基于类路径和环境条件来推断所需要的配置,Spring Boot 会根据项目中引入的依赖和当前环境来自动装配相关的配置项…...

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名,介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…...

如何安装cnpm

今天尝试用npm install安装一个项目的依赖,但是无论如何都不能完成,等待时间非常久,所以同事推荐了cnpm,确实非常好用,所以推荐了出来,希望能给大家带来帮助。 cnpm 是中国淘宝团队提供的一个 npm 镜像工具…...

正则表达式 匹配特定字符后的所有字符

在处理文本数据时,正则表达式(RegularExpressions,简称Regex)是一种非常强大的工具,它可以用来搜索、匹配和替换文本中符合特定模式的字符串。 首先,明确我们的目标是匹配完整的URL,并获取它之…...

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…...

数据结构与算法:动态规划dp:理论基础和相关力扣题(509.斐波那契数列、70.爬楼梯)

1.0.理论基础 动态规划主要解决的问题种类有: 背包问题打家劫舍股票问题子序列问题 解决步骤: dp数组及其下标的意义递推公式dp数组初始化遍历顺序打印dp数组 2.0.相关力扣题 509.斐波那契数列 class Solution:def fib(self, n: int) -> int:i…...

某政务行业基于 SeaTunnel 探索数据集成平台的架构实践

分享嘉宾:某政务公司大数据技术经理 孟小鹏 编辑整理:白鲸开源 曾辉 导读:本篇文章将从数据集成的基础概念入手,解析数据割裂给企业带来的挑战,阐述数据集成的重要性,并对常见的集成场景与工具进行阐述&…...

word-break控制的几种容器换行行为详解

word-break 属性在控制换行行为时需要根据语言判断,对于中文 一个字符就是一个单词,字符换行不影响阅读理解,而对于英文来说,多个连续的字符才会是一个单词,例如中文的 早 英文为 morning。 morning7个字符才算一个单词…...

【0x0084】HCI_Set_Min_Encryption_Key_Size命令详解

目录 一、命令概述 二、命令格式及参数 2.1 HCI_Set_Min_Encryption_Key_Size命令格式 2.2. Min_Encryption_Key_Size 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令的执行流程 4.1. 主机端准备阶段 4.2. 命令发送阶段 4.3. 控制器接收和…...

关于2025年智能化招聘管理系统平台发展趋势

2025年,招聘管理领域正站在变革的十字路口,全新的技术浪潮与不断变化的职场生态相互碰撞,促使招聘管理系统成为重塑企业人才战略的关键力量。智能化招聘管理系统平台在这一背景下迅速崛起,其发展趋势不仅影响企业的招聘效率与质量…...

Docker部署Spring Boot + Vue项目

目录 前提条件 概述 下载代码 打开代码 Docker创建网络 MySQL容器准备 MySQL数据库配置 启动MySQL容器 测试连接MySQL 初始化MySQL数据 Redis容器准备 修改Redis配置 启动redis容器 部署后端 后端代码打包 上传jar包到Linux 创建Dockerfile 构建镜像 运行后…...

开发规范

开发规范 企业项目开发有2种开发模式:前后台混合开发和前后台分离开发。 前后台混合开发 顾名思义就是前台后台代码混在一起开发,如下图所示: 这种开发模式有如下缺点: 沟通成本高:后台人员发现前端有问题&#xf…...

九 RK3568 android11 MPU6500

一 MPU6500 内核驱动 1.1 查询设备连接地址 查看原理图, MPU6500 I2C 连接在 I2C4 上, 且中断没有使用 i2c 探测设备地址为 0x68 1.2 驱动源码 drivers/input/sensors/gyro/mpu6500_gyro.c drivers/input/sensors/accel/mpu6500_acc.c 默认 .config 配置编译了 mpu6550 …...

openplant实时数据库(二次开发)

资源地址 我的网盘〉软件>数据库>openplant>openplant实时数据库(二次开发)...

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析: 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数,使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…...

“AI智慧化服务系统:未来生活的智能管家

在当今快速发展的科技时代,人工智能(AI)正以前所未有的速度改变着我们的生活。AI智慧化服务系统作为这一变革的前沿技术,正在逐渐成为我们未来生活的智能管家。它们不仅提高了服务效率,还为我们带来了更加个性化和便捷…...

python管理工具:conda部署+使用

python管理工具:conda部署使用 一、安装部署 1、 下载 - 官网下载: https://repo.anaconda.com/archive/index.html - wget方式: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…...

minio https配置

minio启动时候指定数据目录,配置文件,密钥文件目录,环境文件 1.创建minio用户,专门用于服务启动的 groupadd -r minio-user useradd -M -r -g minio-user minio-user 2.在当前用户目录下创建minio目录,存储minio相关文件 mkdir minio 在mini…...

SpringMVC——原理简介

狂神SSM笔记 DispatcherServlet——SpringMVC 的核心 SpringMVC 围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器(即不同的Servlet)。根据请求的url,分配到对应的Servlet接口。 当发起请求时被前置的控制…...

Ubuntu18.04 解决 libc.so.6: version `GLIBC_2.28‘ not found

Glibc(GNU C Library)是 GNU 系统及其衍生系统如 Linux 操作系统中实现 C 语言标准库的核心组件。升级 Glibc 是一个非常谨慎的操作,因为它与系统的许多关键功能和服务密切相关。Ubuntu 18.04 默认安装的 Glibc 版本为 2.27,但某些…...

Notepad++移除所有空格

1.打开Notepad。 2.打开你想要编辑的文件。 3.按下 Ctrl H 打开查找和替换对话框,并选择 “正则表达式”。 4.在 “查找目标” 框中输入 \s。 5.在 “替换为” 框中留空,不填写任何内容。 6.点击 “全部替换” 按钮。...

Android BottomNavigationView不加icon使text垂直居中,完美解决。

这个问题网上千篇一律的设置iconsize为0,labale固定什么的,都没有效果。我的这个基本上所有人用都会有效果。 问题解决之前的效果:垂直方向,文本不居中,看着很难受 问题解决之后:舒服多了 其实很简单&…...

如何使用 `forEach` 遍历数组?

数组遍历相关问题:如何使用 forEach 遍历数组? 在 JavaScript 中,遍历数组是一个常见且必要的操作。数组提供了多种方法来进行遍历,其中 forEach 是一种非常方便且常用的方法。它可以轻松地对数组中的每个元素执行回调函数。理解…...

Go语言之路————条件控制:if、for、switch

Go语言之路————if、for、switch 前言ifforswitchgoto和label 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程&#xff0…...

OpenAI推出首个AI Agent!日常事项自动化处理!

2025 年1月15日,OpenAI 正式宣布推出一项名为Tasks的测试版功能 。 该功能可以根据你的需求内容和时间实现自动化处理。比方说,你可以设置每天早晨 7 点获取天气预报,或定时提醒遛狗等日常事项。 看到这里,有没有一种熟悉的感觉&a…...

Go语言的编程范式

Go语言的编程范式 引言 Go语言,又称为Golang,由Google于2007年开发并于2009年开放源代码。Go语言被设计成一种简洁、高效且适用于多核计算和网络编程的语言。其独特的并发模型、静态类型系统以及高效的性能,使其在现代软件开发中逐渐获得了…...

如何在 Rocky Linux 上安装极狐GitLab?

本文分享如何在 Rocky Linux 操作系统上安装极狐GitLab。 相关资料 极狐GitLab 在各种操作系统下的安装指南官网文档 前提条件 一个安装了 Rocky Linux 操作系统的云服务器 可以查看 /etc/os-release 中的信息,确认操作系统信息: NAME"Rocky …...