lixinghui

FreeRTOS任务基础知识

任务基础知识 1. 多任务系统 1.1 前后台系统 单片机裸机开发时,一般都是在 main 函数里面用 while(1) 做一个大循环来完成所有的处理,循环中调用相应的函数完成所需的处理。有时也需要在中断中完成一些处理。相对于多任务系统而言,这就是单人单任务系统也称作前后台系统,中断服务函数作为前台程序,while(1) 作为后台程序,如下图示 1.2 抢占式多任务系统 多任务...

FreeRTOS内存管理

内存管理一 内存管理是一个系统基本组成部分,FreeRTOS中大量使用了内存管理,比如创建任务、信号量、队列等会自动从堆中申请内存。用户应用层代码也可以使用 FreeRTOS 提供的内存管理函数来申请和释放内存 1. 内存管理简介 FreeRTOS 创建任务、信号量、队列等的时候有两种内存申请的方法:一种是动态的申请所需的 RAM;一种是由用户自行定义所需的 RAM(静态申请) ...

FreeRTOS软件定时器

软件定时器 MCU 一般都自带定时器,属于硬件定时器,但是不同的 MCU 其硬件定时器数量不同,有时需要考虑成本的问题。在硬件定时器不够用的时候,FreeRTOS也提供了定时器功能,不过是属于软件定时器,其定时精度没有硬件定时器高,但是对于精度要求不高的周期性任务也足够了 1. 软件定时器介绍 软件定时器允许设置一段时间,当设置的时间到达之后就会执行回调函数。软件定时器的回调函数是在定...

FreeRTOS事件标志组

事件标志组 1. 事件标志组介绍 信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步,此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与多个事件或任务间的同步 事件位:用来表明某个事件是否发生,通常用作事件标志 事件组:一组事件位组成一个事件组,事件组中的事件位通过编号来访问 事件标志组的数据类型为 EventGroupH...

FreeRTOS递归互斥信号量

递归互斥信号量 1. 递归互斥信号量 递归互斥信号量是一种特殊的互斥信号量,已经获取了互斥信号量的任务不能再次获取这个互斥信号量,但是递归互斥信号量不同;已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量(即可以嵌套使用),且次数不限。 递归互斥信号量也有优先级继承的问题。一个任务获取了多少次递归互斥信号量就必须释放多少次。比如,若某个任务成功获取了 3 次递归互斥量,那么该...

FreeRTOS互斥信号量

互斥信号量 1. 优先级翻转 优先级翻转是使用二值信号量时常遇见的问题,在可剥夺内核中非常常见,但是在实时系统中不允许出现这种现象,因为会破坏任务的预期顺序,可能会导致严重后果。 如下图所示的优先级翻转的例子: 低优先级任务 L 要访问共享资源,在获取到信号量使用 CPU 的过程中,如果此时高优先级任务 H 到达,会剥夺 L 的 CPU 使用权从而运行任务 H ...

FreeRTOS计数信号量

计数信号量 1. 计数信号量简介 计数型信号量有以下两种典型用法 事件计数:每次事件发生,事件处理函数将释放信号量(信号量计数值加 1),其他处理任务会获取信号量(信号量计数值减 1)来处理事件。因此,计数值是事件发生的数量和事件处理的数量差值。计数信号量在创建时其值为 0 资源管理:信号量表示有效的资源数目。任务必须先获取信号量才能获取资源控制权。当计数值减为零时表示没有的...