IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> FreeRTOS---基础知识(前六章) -> 正文阅读

[系统运维]FreeRTOS---基础知识(前六章)


前言

2021年的全国大学生电子设计竞赛延期了,这就让我们这群电赛人难得有了空档期,借此机会学习一些新的东西。
注:在本文我不介绍FreeRTOS的移植,因为在正点原子的开发手册中有非常详细的讲解,如果项目要求再去学习也不迟,在前期学习中找到自己开发板的那个例程就好了,我的开发板是STM32F407。

一、FreeRTOS是什么?

FreeRTOS的英文全称是:Free Real Time Operating System。翻译成中文有几个关键词:免费、实时、操作系统。

免费,是指这个操作系统是开源的,使用它是不用付钱的,基于这一点很多的公司为了节约成本,在设计产品系统的时候都要求使用FreeRTOS,这就导致了FreeRTOS被广泛使用。

实时,是指FreeRTOS在实际的环境中能够对某一个事件做出实时的相应,即具有实时性。而实现实时性,FreeRTOS主要是依靠任务调度器来完成。FreeRTOS通过用户给每个任务分配优先级以及能够实时改变任务的状态,而任务调度器则会根据任务的优先级和任务所处的状态来决定下一刻应该运行哪个任务,这样在遇到实际的事件时,操作系统就可以快速得做出反应。也就是实现实时性。

操作系统,指的是它是一个操作系统。

二、FreeRTOS的任务基础知识

1.多任务系统

在没有使用操作之前,我们写程序大都是在main.c文件中写一个while(1)死循环,来不停的循环运行多个任务。这样写虽然很直观方便,但是它有一个特点就是在上一个任务没有完成之前当前的任务是无法执行的,这就可能导致在实际项目中会出现数据丢包反应延迟的现象,为了处理这个问题我们可以设置中断,通过信号来触发中断或者通过定时来进中断来处理当前任务,但是这样仍旧无法完成解决当前任务没有完成下个任务无法进行的问题。像这样的系统,叫做单任务系统

单任务系统
而使用操作系统后就不一样了,用户可以在操作系统中将一个大任务分成很多个小任务,每个小任务通常都是一个while(1),因为任务调度的存在,操作系统可以每次执行这些小任务一小段时间,尽管说每个时刻仍旧是执行一个任务,但是由于操作系统并不完全执行完一个任务就切换到另一个任务,这样整个系统运行起来就有一种多任务并行的感觉,而且每个任务的运行并不干扰其他任务的。这就是多任务系统。这时候读者应该有一个问题,尽管是每个任务执行一小段时间,但是先后顺序如何决定?FreeRTOS是通过设置不通过任务的优先级来解决的。高优先级就绪状态的任务总是先运行,而且还可以抢占低优先级运行态任务的CPU使用权。因此FreeRTOS系统也是一个抢占式的实时多任务系统。

抢占式多任务系统

2.任务的状态

FreeRTOS中的任务有四种状态:运行态、就绪态、阻塞态、挂起态。

运行态:当前任务正在运行的状态。
就绪态:如果该任务已经准备好了,可以进入运行态了,这种状态就是就绪态。
阻塞态:当一个任务正在等待某个外部事件的状态。一般调用vTaskDelay()来使任务进入阻塞态,直至延时周期完成。
挂起态:任务被挂起不能进入运行状态的状态,不同于阻塞态等待延时周期完成了就解除了,挂起态需要调用相应的函数来解除。

这四种状态的关系如下:
四种状态的关系

3.任务的优先级

·通常情况下,FreeRTOS操作系统设置32级优先级,其中数值越小优先级越低。当然如果有特殊要求,也可以自己设置优先级的级数,一般设置成满足应用要求的最小值。
·多个任务也可以共用一个优先级,数量不限。如果操作系统同时遇到相同优先级且处于就绪状态的任务时,就会使用时间片轮转调度器获取运行时间。
注:1、空闲任务需要使用优先级0
2、中断函数中要使用FreeRTOS中的API函数的话,中断优先级一定要低于32

4.任务堆栈

当任务调度器打断一个任务去运行另一个任务时,如何保证第二个任务执行时间结束后,前一个任务可以恢复现场,这时候就要运用到任务堆栈了。在每个任务被创建时都会人为地或者系统自动地定义一个对应的堆栈,用来保存现场和恢复现场。
任务堆栈的大小由用户定义,一般根据任务的大小分配空间。这里要注意,因为任务堆栈的数据类型是uint32_t,大小为4个字节。所以我么定义的堆栈的大小是usStackDepth的四倍。

三、FreeRTOS的基础任务函数

1.任务创建和删除

任务创建函数,一般是使用动态创建运用:xTaskCreate()
任务创建函数

删除函数运用:vTaskDelete(),参数为删除任务的任务句柄,如果删除自身的话用NULL。

2.任务挂起和恢复

任务的挂起函数用:vTaskSuspend()
任务的恢复函数用: vTaskResume()
在中断中恢复一个任务用:vTaskResumeFromISR()
注:参数都是任务的任务句柄。

总结

本文完全是为了对自己学习进行的一个总结,如果文中有错误欢迎大佬批评指正。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:50:23  更:2021-08-11 12:50:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:48:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码