FreeRTOS(教程非常详细)

概述:

      之前写了关于FreeRTOS的部分内容,为了方便阅读,现在给汇总到一起了。全部学习完后,恭喜你对FreeRTOS有了更深的认知。

 第一章  FreeRTOS移植到STM32

 第二章 FreeRTOS创建任务

 第三章  FreeRTOS任务管理

第四章  FreeRTOS消息队列

第五章  FreeRTOS信号量

第六章  FreeRTOS互斥量

第七章  FreeRTOS事件组

第八章  FreeRTOS任务通知

第九章  FreeRTOS软件定时器

第十章  FreeRTOS内存管理

第十一章  FreeRTOS中断管理

为什么要学习 RTOS

      当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又 首选 51 单片机来入门。这里面说的单片机编程通常都是指裸机编程,即不加入任何 RTOS (Real Time Operating System 实时操作系统)的程序。常用的 RTOS 有国外的FreeRTOS、 μC/OS、RTX 和国内的 FreeRTOS、Huawei LiteOS 和 AliOS-Things 等,其中尤以国外开源 且免费的 FreeRTOS 的市场占有率最高。

      在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环 里面实现。现实生活中的很多中小型的电子产品用的都是裸机系统,而且也能够满足需求。 但是为什么还要学习 RTOS 编程,偏偏还要整个操作系统进来。一是项目需要,随着产品 要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得 更加复杂,如果想降低编程的难度,我们可以考虑引入 RTOS 实现多任务管理,这是使用 RTOS 的最大优势。二是学习的需要,必须学习更高级的东西,实现更好的职业规划,为 将来走向人生巅峰迎娶白富美做准备,而不是一味的在裸机编程上面死磕。作为一个合格 的嵌入式软件工程师,学习是永远不能停歇的事,时刻都得为将来准备。书到用时方恨少, 我希望机会来临时你不要有这种感觉。

      为了帮大家理清 RTOS 编程的套路,我们会在“裸机系统与多任务系统”章节简单的 分析下这两种编程方式的区别,这个区别我称它为学习 RTOS 的命门,只要打通这个任督 二脉,以后的 RTOS 学习可以说是易如反掌。在讲解这两种编程方法的区别的时候,我们 主要讲方法论,不会涉及到具体的代码编程,主要还是通过伪代码来讲解。

如何学习 RTOS

       裸机编程和 RTOS 编程的风格有些不一样,而且有很多人说 RTOS 的学习很难,这就 导致学习的人一听到 RTOS 编程就在心理面忌惮三分,结果就是出师未捷身先死。

      那么到底如何学习一个 RTOS?最简单的就是在别人移植好的系统之上,看看 RTOS 里面的 API 使用说明,然后调用这些 API 实现自己想要的功能即可。完全,不用关心底层 的移植,这是最简单快速的入门方法。这种方法各有利弊,如果是做产品,好处是可以快 速的实现功能,将产品推向市场,赢得先机,弊端是当程序出现问题的时候,因对这个 RTOS 不够了解,会导致调试困难,焦头烂额,一筹莫展。如果是学习,那么只会简单的 调用 API,那是不可取的,我们应该深入的学习其中一款 RTOS。

       目前市场上现有的 RTOS,它们的内核实现方式都差不多,我们只需要深入学习其中 一款就行。万变不离其宗,以后换到其它型号的 RTOS,使用起来,那自然是得心应手。 那如何深入的学习一款 RTOS?这里有一个最有效也是最难的方法,就是阅读 RTOS 的源码,深究内核和每个组件的实现方式,这个过程枯燥且痛苦。但为了能够学到 RTOS 的精 华,你不入地狱谁入地狱?

      市面上虽然有一些讲解相关 RTOS 源码的书,如果你基础不够,且先前没有使用过该 款 RTOS,那么源码看起来还是会非常枯燥,且并不能从全局掌握整个 RTOS 的构成和实现。

FreeRTOS 版权

      FreeRTOS 由美国的 Richard Barry 于 2003 年发布,Richard Barry 是 FreeRTOS 的拥有 者和维护者,在过去的十多年中 FreeRTOS 历经了 9 个版本,与众多半导体厂商合作密切, 累计开发者数百万,是目前市场占有率最高的 RTOS。

      FreeRTOS 于 2018 年被亚马逊收购,改名为 AWS FreeRTOS,版本号升级为 V10,且 开源协议也由原来的 GPLv2+修改为 MIT,与 GPLv2+相比,MIT 更加开放,你完全可以理 解为是为所欲为的免费。V9 以前的版本还是维持原样,V10 版本相比于 V9 就是加入了一 些物联网相关的组件,内核基本不变。亚马逊收购 FreeRTOS 也是为了进军眼下炒的火热 的物联网和人工智能。

FreeRTOS 收费问题

FreeRTOS

      FreeRTOS 是一款 “开源免费”的实时操作系统,遵循的是 GPLv2+的许可协议。这里说 到的开源,指的是你可以免费得获取到 FreeRTOS 的源代码,且当你的产品使用了 FreeRTOS 且没有修改 FreeRTOS 内核源码的时候,你的产品的全部代码都可以闭源,不用开源,但是当 你修改了 FreeRTOS 内核源码的时候,就必须将修改的这部分开源,反馈给社区,其它应用部 分不用开源。免费的意思是无论你是个人还是公司,都可以免费地使用,不需要掏一分钱。

OpenRTOS

FreeRTOS 和 OpenRTOS 拥有的代码是一样的,但是可从官方获取到的服务却是不一 样的。FreeRTOS 号称免费,OpenRTOS 号称收费,它们的具体区别见表

SaveRTOS

      SaveRTOS 也是基于 FreeRTOS,但是 SaveRTOS 为某些特定的领域做了安全相关的设 计,有关 SaveRTOS 获得的安全验证具体见表格 。当然,SaveRTOS 也是需要收费,人 家这些安全验证可不是白做的。

 首先自己先移植FreeRTOS到STM32中自己感受一下多任务操作系统和裸机开发有什么区别,教程前面已经有了,还有就是深度学习一下C语言的链表,以及队列,指针结构体等,这样让我们后面的学习变得很轻松。内容参考野火的Freertos内核实现与应用开发指南,详细代码可以去野火官方下载中心下载查看野火产品资料下载中心 — 野火产品资料下载中心 文档https://doc.embedfire.com/products/link/zh/latest/index.html

C语言链表详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode【12】整数转罗马数字

题目: 思路: https://blog.csdn.net/m0_71120708/article/details/128769894 代码: public String intToRoman(int num) {String[] thousands new String[] {"", "M", "MM", "MMM"};String[] hun…

【自然语言处理】【大模型】赋予大模型使用工具的能力:Toolformer与ART

赋予大模型使用工具的能力:Toolformer与ART ​ 本文介绍两种赋予大模型使用外部工具能力的方法:Toolformer和ART。 Toolformer论文地址:https://arxiv.org/pdf/2302.04761.pdf ART论文地址:https://arxiv.org/pdf/2303.09014.pd…

【网络奇遇记】那年我与计算机网络的浅相知

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 计算机网络的定义1.1 计算机早期的一个最简单的定义1.2 现阶段计算机网络的一个较好的定义 二. …

【IPC】消息队列

1、IPC对象 除了最原始的进程间通信方式信号、无名管道和有名管道外,还有三种进程间通信方式,这 三种方式称之为IPC对象 IPC对象分类:消息队列、共享内存、信号量(信号灯集) IPC对象也是在内核空间开辟区域,每一种IPC对象创建好…

【汇编】处理字符问题

文章目录 前言一、处理字符问题1.1 汇编语言如何处理字符1.2 asciiascii码是什么?ascii码表是什么? 1.3 汇编语言字符示例代码 二、大小写转换2.1 问题:对datasg中的字符串2.2 逻辑与和逻辑或2.3 程序:解决大小写转换的问题一个新…

「项目阅读系列」go-gin-example star 6.5k!(1)

文章目录 准备工作适宜人群项目信息 项目结构代码阅读主要模块代码主函数模块router 路由模块auth 授权模块数据库 修改文章请求分析其他依赖 总结 准备工作 适宜人群 初学 go 语法,希望了解 go 项目的构建过程和方式。 项目信息 go-gin-example 项目是使用 gin…

qt-C++笔记之两个窗口ui的交互

qt-C笔记之两个窗口ui的交互 code review! 文章目录 qt-C笔记之两个窗口ui的交互0.运行1.文件结构2.先创建widget项目,搞一个窗口ui出来3.项目添加第二个widget窗口出来4.补充代码4.1.qt_widget_interaction.pro4.2.main.cpp4.3.widget.h4.4.widget.cpp4.5.second…

JAVA for 循环训练 Pattern

import java.util.Scanner;public class Pattern {public static void main(String[] args) {int[] arr {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0};Scanner in new Scanner(System.in);System.out.print("请输入n:");int n in.nextInt();in.close();for …

LeetCode27.移除元素(暴力法、快慢指针法)

每日一题:LeetCode27.移除元素 1.问题描述2.解题思路3.代码 1.问题描述 问题描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必…

Linux(Ubuntu)安装JDK环境

系统环境 Ubuntu20.04 下载JDK压缩包 前往Oracle官网进行后续下载或单击下载JDK压缩包 下拉找到JDK8,在Linux板块下选择适配系统架构的压缩包文件(后缀为tar.gz),系统架构可通过uname -m命令查看 安装JDK 安装环境通常放在/usr/local下,进入…

免费稳定几乎无门槛,我的ChartGPT助手免费分享给你

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 ChatGPT想必大家应该都不陌生了,大部分人或多或少都接触了,好多应该都是通过openAi的官方进行使用的,这个门槛对大部分人有点高,…

公共字段自动填充-@TableField的fill实现(2)

TheadLocal 客户端发送的每次http请求,在服务端都会分配新的线程。因此登录检查过滤器、controller、元数据对象处理器属于一个线程。 TheadLocal是线程的局部变量: TheadLocal常用方法: 如何在元数据对象处理器中获取当前登录用户的id&…

开发知识点-uniapp微信小程序-开发指南

uniapp uni.chooseLocationgetCurrentPages美团外卖微信小程序开发uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端,学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并…

酷柚易汛ERP - 序列号盘点操作指南

1、应用场景 将系统中开启序列号的商品数量与与实际存放的数量进行对比。 2、主要操作 2.1 录入序列号 打开【盘点】-【序列号盘点】,新增序列号盘点单,点击【SN】按钮,在弹框中输入序列号。 支持扫描枪录入序列号支持复制粘贴序列号录入…

JS特效:跟随鼠标移动的小飞机

前端网页中&#xff0c;用JS实现鼠标移动时&#xff0c;页面中的小飞机向着鼠标移动。 效果 源码 <!DOCTYPE html> <html><head><style>*{margin: 0;padding: 0;}body{height: 100vh;background: linear-gradient(200deg,#005bea,#00c6fb);}#plane{…

【WiFI问题自助】解决WiFi能连上但是没有网的问题

WiFi能连上但是没有网的问题 背景&#xff1a;wifi能连上&#xff0c;但是没有网 解决 遇事不决&#xff0c;先重启啊&#xff01;怎么重启&#xff1f;拔掉电源再插上&#xff01;拔掉网线再插上&#xff01; 直接ok了。 思考记录 今天WiFi又上不了网了&#xff0c;昨天报…

大数据Doris(二十六):数据导入(Routine Load)介绍

文章目录 数据导入(Routine Load)介绍 一、​​​​​​​适用场景

数据结构及八种常用数据结构简介

data-structure 数据结构是一种存在某种关系的元素的集合。“数据” 是指元素&#xff1b;“结构” 是指元素之间存在的关系&#xff0c;分为 “逻辑结构” 和 “物理结构&#xff08;又称存储结构&#xff09;”。 常用的数据结构有 数组&#xff08;array&#xff09;、栈&…

详细步骤记录:持续集成Jenkins自动化部署一个Maven项目

Jenkins自动化部署 提示&#xff1a;本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…