FreeRTOS实时操作系统(一)RTOS的基本概念

news2024/12/23 14:38:10

文章目录

  • 前言
  • 操作系统分类
  • 编程风格纠正
  • FreeRTOS介绍
    • 任务调度方式
    • 任务状态
  • 总结


前言

最近买了把75系列的机械键盘,没有数字区域,想起来稚辉君曾经做过一把客制化键盘,于是下载了资料准备学一学,网上很多开源的都是用的ATMEGA32U4制作的,稚辉君用stm32f103cbtx就做出来了,让我很佩服,打开资料后发现软件部分涉及到了操作系统,于是打算学一下FreeRTOS。

大部分还是参考正点原子的教程,本篇只是一些基本概念,无具体代码内容学习


操作系统分类

实时操作系统:能及时的响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对事件的处理。(按系统完成任务的时间的严格程序分为强实时与弱实时)

分时操作系统:按时间片轮转完成各个任务,任务没有优先级,这种系统就称为分时操作系统。(感觉像平时的while循环里面放一堆,裸机开发)

编程风格纠正

  1. 变量定义
    一般前面加上该变量的类型,如:char cTemp;
    char:c,short:s,long:l,无符号类型加u,指针加p,结构体或者任务句柄加x。

  2. 函数名
    函数名包含了函数返回值的类型、函数所在的文件名以及函数的功能,如果是私有的函数,还会加prv前缀。
    举例:
    xTaskCreate()函数的返回值为任务句柄,在Task.c中定义,作用是创建任务;
    vTaskPrioritySet()函数的返回值为void,在Task.c中定义,作用是设置优先级;


  3. 在FreeRTOS中,宏用大写字母表示,并配有小写字母前缀,指示该宏在哪个头文件定义。
    举例
    portMAXDELAY,位于portable.h;
    贯穿FreeRTOS的整个代码表示0与1的宏如下:
    pdTRUE 1
    pdFALSE 0
    pdPASS 1
    pdFAIL 0

FreeRTOS介绍

全称:免费的实时操作系统(Real-time operating system for microcontrollers)

内核4k-9k之间,大部分器件都放的下,可裁剪,轻量级,易移植

裸机开发需要精心设计程序流执行,多任务系统反而简单了,这种逻辑设计被简化了

内部任务也有各自的优先级,通过不停调度实现分时执行各个任务,中断可以打断任意任务。
任务的数值越大优先级越高,与中断相反,且实现优先级的方法有硬件和软件
任务数量没有限制,但是因为要分配器件的内存给任务堆栈保存数据用,所以还是有硬件限制

任务调度方式

抢占式调度:整个过程就是在高优先级任务抢占,阻塞挂起等操作,任务在就绪和运行之间切换
在这里插入图片描述
时间片轮换:设置同优先级的任务享有同等的CPU时间,即时间片,一个时间片即SysTick中断周期
在这里插入图片描述
没有用完的时间片不再使用了,如Task3遇到阻塞的话,剩下的时间片就丢了。

还有一种叫协程式调度(轮询,变回裸机开发了),不常用吧。

任务状态

在这里插入图片描述
不同状态之间的转换:
在这里插入图片描述
任务的列表:当某个位置为1时,代表所对应的优先级就绪列表有任务存在
在这里插入图片描述
系统运行会从上往下找,上面的优先级高,寻找就绪态的任务

总结

先简单了解一下RTOS的基本情况,后面关于移植有直接手动移植的,还有利用HAL库生成的,我偏向第二种,简单学习了一下发现内容还很多,之后详细总结一篇。

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

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

相关文章

面试专题:Redis

1.redis简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快, 因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不…

Redis入门 - Redis Stream

原文首更地址,阅读效果更佳! Redis入门 - Redis Stream | CoderMast编程桅杆Redis入门 - Redis Stream Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列(MQ,Message Queue)&#xf…

【Spring】— Spring MVC入门

目录 Spring MVC入门1.Spring MVC概述2.案例——第一个Spring MVC应用1.创建项目,引入JAR包2.配置前端控制器3.创建Controller类4.创建Spring MVC的配置文件,配置控制器映射信息5.创建视图(View)页面6.启动项目,测试应…

Axios异步调用

promise 主要解决异步深层嵌套的问题 promise 提供了简洁的API 使得异步操作更加容易 1. Promise 基本API //实例方法 .then() //得到异步任务正确的结果 .catch() //获取异常信息 .finally() //成功与否都会执行(不是正式标准) 2. axios基本使用 …

window服务器环境将springboot项目 jar包注册成一个window服务自启动

目录 1.下载WinSW工具 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/releases 2.新建一个Window Service信息的xml文件 <!--…

OpenCV 笔记_3

文章目录 笔记_3直方图匹配(直方图规定化) 主要针对单通道图像模板匹配matchTemplate 模板匹配函数 图像卷积filter2D 卷积函数 过滤器图像噪声的产生cvflann::rand_double 产生随机浮点数在&#xff08;0~1&#xff09;之间cvflann::rand_int 产生随机整数在&#xff08;0~RAN…

最受欢迎的项目管理软件大揭秘!

项目管理软件是现代化项目管理的重要工具。这种软件可以帮助管理项目进度、资源、预算等方面的事项&#xff0c;以及项目团队之间的沟通和协作。目前市面上有很多不同的项目管理软件&#xff0c;如&#xff1a;Zoho Projects、Wrike、Asana、Trello、Basecamp、Jira等等。然而&…

操作系统-文件管理-文件系统基础

目录 一、文件的概念 文件地属性 文件的基本操作 二、文件的逻辑结构 2.1顺序文件 2.2索引文件 2.3索引顺序文件 2.4文件的目录 2.4.1文件控制块FCB 2.4.2目录结构 2.4.3索引结点(FCB改进) 三、文件保护 3.1口令保护 3.2加密保护 3.3访问控制 四、物理结构 4.1连…

操作系统-文件管理-文件系统管理和结构

目录 一、文件存储空间管理 存储空间的划分和初始化 1.1空闲表法 1.2空闲链表法 1.3位示图法 1.4成组链接法 二、文件共享 2.1基于索引结点的共享方式(硬链接) 2.2基于符号链的共享方式(软链接) 三、文件系统的层次结构 四、文件系统的全局结构 五、虚拟文件系统 文件…

自定义阿里云OSS上传文件的start依赖

说明&#xff1a;SpringBoot项目之所以开发起来很方便&#xff0c;是因为SpringBoot项目在启动时自动为我们装配了很多Bean对象&#xff08;参考&#xff1a;http://t.csdn.cn/MddMO&#xff09;&#xff0c;这取决于我们是否在pom.xml文件添加对应的依赖&#xff0c;称为起步依…

【ARIMA-LSTM】合差分自回归移动平均方法-长短期记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySQL - 第3节 - MySQL表的操作

1.创建表 创建表的SQL如下&#xff1a; CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT 注释信息],field2 datatype2 [COMMENT 注释信息],field3 datatype3 [COMMENT 注释信息] )[CHARSETcharset_name] [COLLATEcollation_name] [ENGINEengine_name];说明…

springCloudAlibaba组件-Nacos-功能概述与配置(一)

文章目录 概述使用方式Nacos的关键特性 概述 一个更易于构建云原生应用的动态服务发现&#xff08;所有的微服务都注册到nacos中&#xff0c;微服务通过nacos服务中心进行服务发现&#xff09;、配置管理(主要将公共的服务配置&#xff08;如连接redis、mysql)在一个配置文件中…

【c语言初阶】操作符全面知识总结

操作符详解 操作符种类算术操作符移位操作符位操作符编程题&#xff1a;两数交换多种解法编程题&#xff1a;求一个数在内存中二进制数1的个数赋值操作符单目操作符关系操作符编程题&#xff1a;谁是凶手逻辑操作符一道笔试题条件操作符逗号表达式下标引用、函数调用和结构体成…

响应式编程理论篇:源码浅析WebClient

1 缘起 WebFlux系统中&#xff0c;如何请求第三方或其他内部兄弟系统提供的接口&#xff1f; 当然&#xff0c;可以直接使用OKhttp/Apache HttpClient/SpringMVC RestTemplate&#xff0c; 在WebFlux中同样提供了请求接口的工具&#xff1a;WebClient&#xff0c; 本篇文章主要…

03单链表及代码实现

链表介绍&#xff08;Linked List&#xff09; 链表是有序列表&#xff0c;存储方式如下图&#xff08;物理结构图&#xff09; 链表小结 链表是以结点的方式来存储的。链式存储。每个结点包含data域、next域&#xff08;指向下一个结点&#xff09;。要注意的是&#xff0…

阿里云服务器适用于哪些业务场景?有哪些行业的客户在使用?

阿里云服务器适用于哪些业务场景&#xff1f;有哪些行业的客户在使用&#xff1f;    阿里云服务器的主要业务场景   阿里云服务器能够满足各种业务场景的需求&#xff0c;具有高性能、易扩展、安全可靠等特点。下面我们将详细介绍阿里云服务器适用于哪些业务场景。 Web应用…

JUC并发编程初学

什么是JUC进程和线程回顾Lock锁生产者和消费者8锁的线程集合类不安全CallableCountDownLatch、CyclicBarrier、Semaphore读写锁阻塞队列线程池四大函数式接口Stream流式计算分支合并异步回调JMMvolatile深入单例模式深入理解CAS原子引用可重入锁、公平锁非公平锁、自旋锁、死锁…

阿里云服务器的扩展性如何?是否支持弹性扩容和自动负载均衡?

阿里云服务器的扩展性如何&#xff1f;是否支持弹性扩容和自动负载均衡&#xff1f;   阿里云服务器的扩展性特点   阿里云服务器&#xff08;ECS&#xff09;在扩展性方面具有优势&#xff0c;能够满足用户不断变化的业务需求。以下我们将详细介绍阿里云服务器的扩展性特点…

离散数学题目收集整理练习(期末过关进度50%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 ✨博主的其他文章&#xff1a;点击…