基于STM32F103的FreeRTOS系列(四)·FreeRTOS资料获取以及简介

目录

1.  FreeRTOS简介

1.1  FreeRTOS介绍

1.2  为何选择FreeRTOS

1.3  FreeRTOS资料获取

1.3.1  官网下载

1.3.2   Github下载

1.3.3  托管网站下载

1.4  FreeRTOS的编程风格

1.4.1  数据类型

1.4.2  变量名

1.4.3  函数名

1.4.4  宏


1.  FreeRTOS简介

1.1  FreeRTOS介绍

FreeRTOS是一个可裁剪的小型RTOS系统,其特点包括:

① FreeRTOS 的内核支持抢占式,合作式和时间片调度。

② SafeRTOS 衍生自 FreeRTOS,SafeRTOS 在代码完整性上相比 FreeRTOS更胜一筹。

③ 提供了一个用于低功耗的 Tickless 模式。

④ 系统的组件在创建时可以选择动态或者静态的 RAM,比如任务、消息队列、信号量、软件定时器等等。

⑤ 已经在超过 30 种架构的芯片上进行了移植。

⑥ FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元,如 STM32F407.

⑦ FreeRTOS 系统简单、小巧、易用,通常情况下内核占用 4k-9k 字节的空间。

⑧ 高可移植性,代码主要 C 语言编写。

⑨ 支持实时任务和协程(co-routines 也有称为合作式、协同程序,我在这里使用的均成为协程)。

1.2  为何选择FreeRTOS

① 开源和免费:FreeRTOS是开源的实时操作系统,遵循MIT许可证,可以免费获取和使用。这使得它成为许多嵌入式开发者和企业的首选,特别是在成本和许可证限制方面较为敏感的项目中。

② 轻量级和高效:FreeRTOS设计精简,专注于提供基本的实时调度和任务管理功能,适合资源有限的嵌入式系统。它的内核非常小巧,具有低的内存占用和快速的上下文切换时间,能够在各种处理器架构上高效运行。

③ 广泛的架构支持:FreeRTOS支持多种处理器架构和开发板,包括ARM Cortex-M,ESP32,PIC,以及多个仿真器和开发板,这使得它在不同项目和硬件平台上都能得到广泛应用。

④ 丰富的特性和生态系统:尽管FreeRTOS本身非常轻量,但它提供了许多丰富的特性,如任务管理、消息队列、信号量、软件定时器等,可以满足大多数嵌入式系统的实时需求。同时,FreeRTOS拥有活跃的社区和丰富的生态系统,提供了许多额外的组件和驱动程序,可以加速开发过程并提供可靠的支持。

⑤ 成熟和可靠性:FreeRTOS经过多年的发展和使用,在工业和商业应用中已被广泛验证和采用,具有高度的成熟性和可靠性,适合要求高可靠性和稳定性的应用场景。

⑥ 易于学习和使用:FreeRTOS的API设计简洁清晰,易于理解和使用。它提供了详细的文档和示例,对于初学者和经验丰富的开发者都是友好的选择。

1.3  FreeRTOS资料获取

1.3.1  官网下载

官网下载链接:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensionsFreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensionsFreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

手动输入链接:www.freertos.org 

1.3.2   Github下载

Github下载:GitHub - FreeRTOS/FreeRTOS: 'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.

 

1.3.3  托管网站下载

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

        在该网站可以找到,以前发行的版本: 

        找到自己想要下载的版本,点击进入如下界面:

        其中两个文件均可下载。

注意:以上文件下载完后,我试了一下,进行解压的话,会提示文件过多,解压不了,我试了另一台电脑上面用的360解压的软件给解压出来了,然后我准备上传到百度网盘,发现由于文件过多,上传和下载速度也是非常感人。现在没有好的解决办法,后续发现好的解决办法会发到:FreeRTOS_时光の尘的博客-CSDN博客

1.4  FreeRTOS的编程风格

1.4.1  数据类型

        FreeRTOS对C语言中的一些数据类型的命名,进行了重定义,以下是部分:

1.4.2  变量名

        比如char型变量的前缀是c, short型变量的前缀是s, long型变量的前缀是1, portBASE_TYPE类型变量的前缀是x。还有其他的数据类型,比如数据结构,任务句柄,队列句柄等定义的变量名的前缀也是 x。

        如果一个变量是无符号型的那么会有一个前缀 u,如果是一个指针变量则会有一个前缀 p。因此,当我们定义一个无符号的 char 型变量的时候会加一个 uc前缀,当定义一个char型的指针变量的时候会有一个pc前缀。

1.4.3  函数名

        如果是私有的函数则会加一个prv (private)的前缀。

①vTaskPrioritySet()函数的返回值为 void型,在task.c这个文件中定义。

②xQueueReceive()函数的返回值为 portBASE_TYPE 型,在 queue. c这个文件中定义。

③vSemaphoreCreateBinary()函数的返回值为 void型,在semphr.h 这个文件中定义。

1.4.4  宏

FreeRTOS_时光の尘的博客-CSDN博客

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

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

相关文章

11. Hibernate 持久化对象的各种状态

1. 前言 本节课和大家聊聊持久化对象的 3 种状态。通过本节课程,你将了解到: 持久化对象的 3 种状态;什么是对象持久化能力。 2. 持久化对象的状态 程序运行期间的数据都是存储在内存中。内存具有临时性。程序结束、计算机挂机…… 内存中…

Web前端浅谈ArkTS组件开发

本文由JS老狗原创。 有幸参与本厂APP的鸿蒙化改造,学习了ArkTS以及IDE的相关知识,并有机会在ISSUE上与鸿蒙各路大佬交流,获益颇丰。 本篇文章将从一个Web前端的视角出发,浅谈ArkTS组件开发的基础问题,比如属性传递、插…

hamcrest 断言框架使用示例和优势分析

引言 在软件测试领域,断言是验证代码行为是否符合预期的关键环节。Hamcrest 断言框架,以其独特的匹配器(Matcher)概念和清晰的失败信息,赢得了广泛的赞誉。尽管 Python 标准库中没有内置的 Hamcrest 库,但…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解(核心) 什么是链接? 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

SQL labs-SQL注入(三,sqlmap使用)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…

学习笔记:MySQL数据库操作3

1. 创建数据库和表 创建数据库 mydb11_stu 并使用该数据库。创建 student 表,包含字段:学号(主键,唯一),姓名,性别,出生年份,系别,地址。创建 score 表&…

C#、Net6、WebApi报表方案

目录 1 Pdf表单方案 1.1出现如下错误提示: 1.2 字体路径使用 2 Docx报表模板方案 2.1 pdf方案缺陷 2.2 解决方案 3 Spire.Doc报表方案 3.1 Docx方案缺陷 3.2 解决方案 4 插入复选框 5 WebApi文件流下载接口 6 软件获取方式 1 Pdf表单方案 使用【Adobe Acrobat P…

python—pandas基础(2)

文章目录 列操作修改变量列筛选变量列使用.loc[](基于标签)使用.iloc[](基于整数位置)使用.filter()方法 删除变量列添加变量列 变量类型的转换Pandas 支持的数据类型在不同数据类型间转换 建立索引新建数据框时建立索引读入数据时建立索引指…

Vue---vue3+vite项目内使用devtools,快速开发!

背景 我们在前期开发时,一般使用chrome或者edge浏览器,会使用vue-devtools或react-devtools(此插件个人未使用,可百度下是否可内嵌入项目!)来审查vue项目;这个需要安转浏览器插件才可支持&…

使用PyTorch导出JIT模型:C++ API与libtorch实战

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中,有介绍过前端触发的通知服务。 【odoo】右上角的提示(通知服务) 此文章则介绍后端触发方法。 内容 直接上代码:但是前提一定是按钮触发!!!!! def bu…

【css】实现扫光特效

对于要重点突出的元素,我们经常可以看到它上面打了一个从左到右的斜向扫光,显得元素亮闪闪的!类似于下图的亮光动效 关键步骤 伪元素设置position :absolute【也可以不用伪元素,直接创建一个absolute元素盖在上面】设置渐变line…

Mike21粒子追踪模型particle tracking如何展示粒子轨迹

前言: 随着模型的推广,模型的很多模块也问的多了起来,PT粒子追踪模块最近群友也在问,结果算了出来,却实现不了展示运动轨迹。今天就写段简单的PT后处理的方法吧。 注意:MIKE21输出模块中不但输出了关于水…

Axure怎么样?全面功能评测与用户体验分析!

软件 Axure 曾经成为产品经理必备的原型设计工具,被认为是专门为产品经理设计的工具。但事实上,软件 Axure 的使用场景并不局限于产品经理构建产品原型。UI/UX 设计师还可以使用 Axure 软件构件应用程序 APP 原型,网站设计师也可以使用 Axure…

如何系统的学习C++和自动驾驶算法

给大家分享一下我的学习C和自动驾驶算法视频,收藏订阅都很高。打开下面的链接,就可以看到所有的合集了,订阅一下,下次就能找到了。 【C面试100问】第七十四问:STL中既然有了vector为什么还需要array STL中既然有了vec…

QSqlQuery增删改查

本文记录使用QSqlQuery实现增删改查的过程。 目录 1. 构建表格数据 声明变量 表格、数据模型、选择模型三板斧设置 列表执行查询 列表的水平表头设置 2. 新增一行 构建一个空行 通过dialog返回的修改行数据,update更新 3. 更新一行 获取到需要更新的行 通…

Spring Bean - xml 配置文件创建对象

类型&#xff1a; 1、值类型 2、null &#xff08;标签&#xff09; 3、特殊符号 &#xff08;< -> < &#xff09; 4、CDATA <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/bea…

信息安全技术解析

在信息爆炸的今天&#xff0c;信息技术安全已成为社会发展的重要基石。随着网络攻击的日益复杂和隐蔽&#xff0c;保障数据安全、提升防御能力成为信息技术安全领域的核心任务。本文将从加密解密技术、安全行为分析技术和网络安全态势感知技术三个方面进行深入探讨&#xff0c;…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃&#xff0c;通过查看崩溃日志如下&#xff1a; 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常&#xff0c;进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

leetcode-105. 从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,nu…