![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
文章平均质量分 92
咸鱼很渴。
把博客当电子笔记本
展开
-
FreeRTOS-内存管理-完结篇
FreeRTOS-内存管理无论是创建任务、队列、信号量还是其他的东西,都需要为其分配一定空间,前面我们都是运用动态内存申请的方法来申请空间,并且我们所使用的的动态内存申请函数都是FreeRTOS自己提供的,而不是使用C标准库中的malloc()和free()这两个函数,主要是因为以下原因:内存动态管理效率低线程不安全不确定性高,每次执行时间不同导致内存碎片使链接器配置变得复杂所以FreeRTOS为我们提供了5种内存管理方法,这5中内存管理方法各有不同 ,分别存放在heap_1、hea原创 2021-09-10 20:04:12 · 823 阅读 · 0 评论 -
FreeRTOS-空闲任务及钩子函数
FreeRTOS-空闲任务及钩子函数FreeRTOS中空闲任务是开启任务调度器自动创建的一个任务,这样可以保证系统中有任务可以运行,这个任务优先级是最低的,如果有其他任务处于就绪态,那么空闲任务就会主动让出CPU使用权给其他任务。那么空闲任务只是为了保证系统中有任务可以运行吗?其实不是,空闲任务其实有两个重要功能,其一,如果某任务调用了vTaskDelete()将自身删除了,那么这个任务的任务控制块和任务堆栈不会同时释放,而是在空闲任务中释放掉,所以空闲任务可以理解为清理垃圾的。其二,由于不是所有的RT原创 2021-09-10 19:27:03 · 2743 阅读 · 1 评论 -
FreeRTOS-Tickless模式
FreeRTOS-Tickless模式很多场合中对功耗要求很严格,并且很多MCU都带有低功耗模式,合理地使用这些低功耗模式可以降低系统的功耗。同时,FreeRTOS也提供了Tickless功耗模式,这样软件和硬件相结合,可以更进一步降低系统功耗,并且配置也很简单。STM32低功耗模式STM32本身支持低功耗模式,它有休眠、停止、待机三种低功耗模式,相比来说,待机模式功耗最低,休眠模式功耗最高,但是相应地,睡眠模式唤醒延迟最低。下表给出三种模式的对比。模式开启方式唤醒方式对1.2原创 2021-09-10 18:23:28 · 813 阅读 · 0 评论 -
FreeRTOS-任务通知
FreeRTOS-任务通知前几章我们介绍了信号量、消息队列、事件标志组等用于任务之间同步或通信的工具,当信号量、消息队列等创建完成后所有任务都能访问这些资源。实际上,在应用过程中,很多时候任务通信或同步是一对一的,这时就可以使用任务通知来代替上面的功能,并且使用任务通知效率高,占用的RAM也小。在使用任务通知前,需要将configUSE_TASK_NOTIFICATIONS置为1。FreeRTOS中每个任务都有32位的通知值,当某个任务要等待任务通知值进入阻塞状态的时候,向该任务发送任务通知就可原创 2021-09-10 12:00:58 · 406 阅读 · 0 评论 -
FreeRTOS-事件标志组
FreeRTOS-事件标志组在前面我们已经学习了信号量,我们知道信号量可以用来做任务同步,但是这种任务同步有一个缺点,就是只能在两个任务之间进行同步,所以为了解决这个问题,FreeRTOS提供了事件标志组,使得多任务之间进行同步。事件标志组表示方法事件标志组由若干个事件标志位组成,每个事件标志位表示某个事件是否发生。事件标志组的数据类型为EventBits_t,具体定义如下typedef TickType_t EventBits_t;#if( configUSE_16_BIT_TICKS原创 2021-09-09 19:26:51 · 498 阅读 · 0 评论 -
FreeRTOS-软件定时器
FreeRTOS-软件定时器一般来说,每个MCU都会有定时器,这些都属于硬件定时器,但是有些时候硬件定时器可能会不够用,FreeRTOS提供了软件定时器,并且当内存足够的时候,软件定时器可以设置很多歌,当然,相比于硬件定时器,软件定时器精度和功能上都会稍差些,但是在一些对精度等条件要求不高的场合中足够了。在使用软件定时器时,可以设置一段时间,经过一段时间后,系统就会自动调用软件定时器所对应的回调函数,但是要注意的是,因为软件定时器回调函数是在定时器服务任务中执行的(当做任务主体的一部分),所以在软件定原创 2021-09-09 18:42:13 · 290 阅读 · 0 评论 -
FreeRTOS-信号量
FreeRTOS-信号量信号量其实就是队列的一种应用,信号量的各种操作都是在队列的基础上建立起来的。那么既然是在队列的基础上建立的,信号量一定具有和队列相同的属性。因此信号量也是为任务和任务、任务和中断之间通信做准备的,但是信号量一般用来进行资源管理和任务同步。因为信号量是一种共享资源,当它被创建之后,系统中所有任务和中断都能对信号量进行访问。同时也可以进行任务同步,即在一个任务(或中断)中告诉另一个任务它所等待的事件发生了,等到发生任务调度的时候,再切换到相应任务中,执行该事件发生的相关处理。Free原创 2021-09-09 17:12:18 · 5615 阅读 · 0 评论 -
FreeRTOS-队列
FreeRTOS-队列在FreeRTOS中,队列是为了任务与任务或任务与中断之间通信而专门准备的,它是任务与任务、任务与中断间传递消息的重要手段,所以我们也称之为消息队列。并且队列也是后面章节中信号量实现的基础,所以有必要深入了解队列及其源码。我们在前面讲述过FreeRTOS中的列表和列表项,我们发现FreeRTOS中的列表更像是我们所说的数据结构中的链表,FreeRTOS中所使用的的链表为双向循环链表。同样地,FreeRTOS中的队列的队列与平时数据结构中所说的队列大同小异,只不过在FreeRTOS原创 2021-09-08 17:30:51 · 1275 阅读 · 1 评论 -
FreeRTOS-延时函数与系统时钟节拍
FreeRTOS-延时函数与系统时钟节拍FreeRTOS中的延时函数是一个很重要的部分,几乎每个任务中都会调用延时函数,在任务中调用延时函数相当于该函数进入阻塞状态,从而会产生任务调度,让CPU处理其他任务。将FreeRTOS提供了两种延时函数可以使用,一种是相对延时函数,另一种是绝对延时函数。本章深入分析这两种函数的延时源码以及如何产生任务调度的。系统时钟节拍FreeRTOS中有一个系统时钟节拍SysTicks,这个系统时钟犹如心脏一样维持系统的运行,通过xTickCount时刻反应当前是什么原创 2021-09-06 18:00:26 · 1513 阅读 · 0 评论 -
FreeRTOS-内核控制函数
FreeRTOS-内核控制函数FreeRTOS中有一些内核函数,一般来说这些内核函数在应用层不会使用,但是内核控制函数是理解FreeRTOS中断的基础。接下来我们逐一分析这些内核函数。taskYIELD()该函数的作用是进行任务切换,这是一个宏定义,实际上调用了portYIELD()。portYIELD函数定义如下:#define portYIELD() \{ \ /* Set a PendSV to request a原创 2021-09-06 14:43:16 · 2278 阅读 · 0 评论 -
FreeRTOS-任务运行时间统计
FreeRTOS-任务运行时间统计原创 2021-09-05 15:25:06 · 4510 阅读 · 3 评论 -
FreeRTOS-任务信息查询
FreeRTOS-任务信息查询FreeRTOS中提供了很多函数可以用来获取相应的任务信息,这里我们会深入分析vTaskGetInfo()、uxTaskGetSystemState()和vTaskList()这三个函数以及它们之间的一些联系。FreeRTOS中的任务信息查询函数列举如下:函数名描述uxTaskPriorityGet()获取某任务优先级vTaskPrioritySet()改变某任务优先级uxTaskGetSystemState()获取系统中所有任务状原创 2021-09-05 13:54:09 · 3259 阅读 · 0 评论 -
FreeRTOS-深入分析列表与列表项
FreeRTOS-深入分析列表与列表项列表和列表项是FreeRTOS中的一个数据结构,FreeRTOS源码中大量使用了列表项,所以有必要深入学习一下列表和列表项,以便为后续学习做铺垫。一、列表项与列表结构体定义既然列表和列表项是一个数据结构,那么我们有必要看一下它们的结构体定义,在list.h文件中我们找到了定义的结构体。先看列表项结构体定义struct xLIST_ITEM{ listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set t原创 2021-08-24 21:28:48 · 591 阅读 · 0 评论 -
FreeRTOS-任务操作
FreeRTOS–任务操作有了前两节系统配置和任务基础了,接下来我们就使用FreeRTOS提供的一些API完成简单的任务操作。一、任务创建和删除(静态方法)在创建静态任务前,我们需要明确以下几点。FreeRTOS是一个轻量级操作系统,在运行操作系统的时候,我们需要为该操作系统分配一定空间,我们称为系统总堆。FreeRTOS每个任务都相当于一个函数,所以任务函数也需要有函数名、函数类型、形参。由于每个任务都需要有自己独立的堆栈,所以需要从系统总堆中为其分配任务堆栈,堆栈大小由用户来指定。每原创 2021-08-23 21:51:12 · 1181 阅读 · 0 评论 -
FreeRTOS-任务基础
FreeRTOS-任务基础大多数时候,使用RTOS就是使用其多任务处理功能。所谓多任务处理,其实并不是我们移植了RTOS系统后,CPU就可以同时处理多个任务,而是CPU会有一定选择性的去处理当前最紧急的事,处理完最紧急的事再去处理其他事,单核CPU永远只处理一件事。FreeRTOS任务系统在不使用操作系统编程的时候,一般都是在主函数中放一个while大循环,依次调用相应函数循环处理所有任务,这就是单任务系统。单任务系统也被称为前后台系统,因为大多数时候我们会使用中断完成一些任务,中断服务函数就原创 2021-08-23 18:38:27 · 2238 阅读 · 0 评论 -
FreeRTOS-系统配置与裁剪
FreeRTOS-系统配置与裁剪在使用FreeRTOS的时候,我们可以根据自己的需要来配置和裁剪FreeRTOS。我们在FreeRTOSConfig.h文件中完成对FreeRTOS系统的裁剪,通过裁剪来减少系统占用RAM和ROM的大小。所谓裁剪其实就是对FreeRTOS中的函数和一些变量、结构体等选择性的定义。FreeRTOS裁剪原理FreeRTOS裁剪主要就是用到了条件编译的方法,其实不仅仅是FreeRTOS是这样,很多RTOS系统都是采用这样的方法。所谓条件编译就是当该部分满足条件的时候原创 2021-08-22 18:32:38 · 3552 阅读 · 0 评论