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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 FreeRTOS任务基础知识 -> 正文阅读

[嵌入式]STM32 FreeRTOS任务基础知识

前言

本文将基于正点原子RTOS开发手册进行讲解任务的基础知识。

一、什么是多任务系统

我们平时使用的51,STM32单片机大家可能接触到的都是裸机,没有涉及到操作系统的知识。裸机处理程序一般运用的都是前后台系统,相对于多任务
系统而言,这个就是单任务系统。中断服务函数作为前台程序,大循环
while(1)作为后台程序。

在这里插入图片描述
前后台系统相对于操作系统而言上手比较简单,对于新手的学习比较友好。但是他相对于操作系统也有很多缺点,他的实时性差,执行代码只能一条一条的执行这样重要的程序可能就不能得到及时的处理,这样可能会导致程序的效果变差。

多任务系统就是创建多个任务,每一个任务都可以执行相应的功能,在RTOS操作系统中每一个任务都有自己的任务优先级,优先级高的任务会先执行,这样重要的任务就可以得到及时的处理,当执行玩优先级高的任务才会去执行优先级低的任务。
在这里插入图片描述

二、任务状态

1.运行态

当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。

2.就绪态

处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!

3.就绪态

如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态,比如说如果某个任务调用了函数 vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!

4.就绪态

像阻塞态一样,任务进入挂起态以后也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用函数 vTaskSuspend()和 xTaskResume()。

在这里插入图片描述
任务间转换图

三、任务优先级

每一个任务都有属于自己的一个任务优先级,在RTOS中优先级可以设置为0~(configMAX_PRIORITIES-1),优先级数值越小代表优先级越低,configMAX_PRIORITIES-1为最高优先级。高优先级的任务可打断正在运行的低优先级任务,这也是RTOS操作系统的特性。
FreeRTOS 调度器确保处于就绪态或运行态的高优先级的任务获取处理器使用权,换句话说就是处于就绪态的最高优先级的任务才会运行。当宏 configUSE_TIME_SLICING 定义为 1 的时候多个任务可以共用一个优先级,数量不限。默认情况下宏 configUSE_TIME_SLICING 在文件FreeRTOS.h 中已经定义为 1。此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间。

四、任务实现

在使用 FreeRTOS 的过程中,我们要使用函数osThreadDef()创建任务,什么是任务函数?任务函数就是完成本任务工作的函数。比如点亮一个LED灯这就是一个任务,我们就可以将他放在任务函数中去执行。

osThreadId AppTaskHandle;//任务函数句柄

void AppTask(void const * argument);//任务函数声明

//创建任务函数
osThreadDef(AppTaskName, AppTask, osPriorityNormal, 0, 128);
AppTaskHandle = osThreadCreate(osThread(AppTaskName), NULL);

//任务函数实现
void AppTask(void const * argument)(1)
{
  
  for(;;)(2)
  {
    (3)
    
    osDelay(5);//调用延时才会释放资源(4)
  }
}

(1)任务函数的本质还是一个函数,每一个函数都有自己的名字那么任务函数也有对应的名字,任务函数的返回类型一定要为 void 类型,也就是无返回值,而且任务的参数也是 void 指针类型的!任务函数的名字可以根据自己来定义。

(2)任务函数执行的过程就是一个大循环,for(;;)这和while循环都是差不多的,都是一个死循环。

(3)循环里面执行的是主要代码。

(4)FreeRTOS的延时函数,调用此函数才会释放资源。

总结

任务的基础知识就给大家讲解到这里,大家有什么不了解的地方可以留言或者私信。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:31:24  更:2022-03-03 16:34:03 
 
开发: 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/26 8:41:11-

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