
STM32Cube高效开发教程(高级篇)-FreeRTOS
文章平均质量分 96
该专栏主要是介绍嵌入式操作系统FreeRTOS,会介绍任务管理、中断管理、消息队列、信号量、互斥量、事件组、任务通知、缓冲区、软件定时器、空闲任务和低功耗,共计11个章节
致虚守静~归根复命
中国石油大学(华东)控制科学与工程学院人工智能专业研究生,研三,软硬都精(不)通(会),各专栏努力更新中...
有需要的可以订阅专栏,在专栏中会有各种干货讲解
展开
-
STM32Cube高效开发教程<高级篇><FreeRTOS>(十五)-----任务通知
一、任务通知的原理和功能声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。任务通知(task notification)是FreeRTOS中的另外一种进程间通信技术。使用任务通知不需要创建任何中间对象,可以直接从任务向任务,或从ISR向任务发送通知,传递一个通知值。原创 2025-03-06 17:36:55 · 31 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(十四)-----通过事件组进行多任务同步
所以,这3个任务在同步点将各自的事件位置1后,再等待其他事件位置1,然后才开始运行,从而达到多个任务在某个同步点同步运行的目的。图中有3个任务,这3个任务分别对应一个事件组中的3个事件位。第三个参数BITMASK_SYNC是等待的同步条件成立的事件位,也就是需要Bit2、Bit1、Bit0都为1,才继续执行后面的程序,所以这行语句就是任务的同步点。当事件组中拖码BITMASK_SYNC表示的3个位都被置1后,3个任务将同时解除阻塞状态,继续执行各自后面的程序,这样就实现了3个任务的同步。原创 2025-02-28 16:55:12 · 36 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(十三)-----事件组介绍及示例
一、 事件组的原理和功能声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。原创 2024-11-21 20:40:48 · 106 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(十二)-----互斥量使用例程
根据传递的互斥量属性,osMutexNew()自动判别是创建互斥量,还是创建递归互斥量。在这个示例中,由于使用了互斥量,在高优先级任务Task_High 试图获取互斥量时,如果互斥量被Task_Low占用着,FreeRTOS会将Task_Low的优先级临时提高到Task_High 的优先级。这样,在Task_Low占用互斥量运行期间,Task_Middle就无法抢占CPU运行,在Task_Low释放互斥量后,Task_High 就能抢占CPU立刻运行。示例的相同,只是将其中的二值信号量换成了互斥量。原创 2024-11-07 22:26:52 · 129 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(十一)-----互斥量及优先级翻转例程
一、 优先级翻转问题声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。使用信号量进行互斥型资源访问控制时,容易出现优先级翻转(priority inversion)问题。互斥量是对信号量的一种改进,增加了优先级继承机制,虽不能完全消除优先级翻转问题,但是可以缓减该问题。原创 2024-11-01 08:43:02 · 106 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(十)-----计数信号量例程
在前一个示例中介绍过,osSemaphoreNew()根据设置的最大计数值,确定是创建二值信号量,还是创建计数信号量。RTC唤醒中断的回调函数是HAL_RTCEx_WakeUpTimerEventCallback(),为便于使用文件freertos.c中定义的计数信号量,我们直接在文件freertos.c中实现这个回调函数。完成设置后,CubeMX自动生成代码。创建计数信号量时,一般应使其初始值等于最大值,例如,用下面的语句创建一个计数信号量,则semb最大计数值为5,初始计数值为5,表示有5个资源可用。原创 2024-10-25 13:22:17 · 92 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(九)-----信号量及二值量例程
一、 信号量和互斥量概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。本专栏在前面介绍了队列,队列的功能是将进程间需要传递的数据存在其中,所以在有的RTOS系统里,队列也被称为“邮箱”。原创 2024-10-24 23:06:02 · 103 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(八)-----队列使用示例
在执行完写入队列后,又调用函数vTaskDelay()延时300ms,这是用软件延时的方式消除按键抖动的影响,同时又使任务Task_ScanKeys进入阻塞状态,让低优先级的任务Task_Draw可以进入运行状态,及时读取队列里的消息并处理。本示例计划的功能是:在任务Task_ScanKeys中扫描按键,将按键代码发送到消息队列,任务Task_Draw读取队列中的按键代码后,在LCD上移动画线。在程序运行时,按下某个按键,或连续快速按下多个按键,会看到LCD显示的这两个数是变化的。原创 2024-10-17 14:14:42 · 142 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(七)-----进程间通信与消息队列
表中有一组函数是用于获取队列信息的,例如,函数pcQucueGetName()返回队列的字符串名称,函数uxQueueSpacesAvailable()返回队列刹余空间个数,函数uxQueueMessagesWaiting()返回队列中等待被读取的消息的个数,这些函数的使用非常简单,这里就不详细介绍其函数原型了,在后面的示例里会用到其中的一些函数。所以,如果传递的是比较大的数据,例如,比较长的字符串或大的结构体,可以在队列的存储单元里存储需要传递数据的指针,通过指针再去读取原始数据。原创 2024-10-14 23:00:48 · 149 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(六)-----FreeRTOS的中断管理
一、 FreeRTOS与中断声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。FreeRTOS的任务有优先级,MCU的硬件中断有中断优先级,这是两个不同的概念。FreeRTOS的任务管理要用到硬件中断,使用FreeRTOS时也可以使用硬件中断,但是硬件中ISR的设计要注意一些设计原则。原创 2024-09-02 15:18:36 · 148 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(五)-----FreeRTOS的任务管理工具函数及多任务编程示例二
一、 任务管理工具函数声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 任务管理工具函数1.1 相关函数概述FreeRTOS中有一些API函数,用于操作任务或获取任务信息,这些函数及其基本功能简介见下表。要在程序中使用这些函数,某些“config”参数或“INCLUDE_”参数需要设置为1。原创 2024-07-30 16:11:50 · 305 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(四)-----FreeRTOS的任务管理相关函数及多任务编程示例
一、任务管理相关函数声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、任务管理相关函数1.1 相关函数概述在FreeRTOS中,任务的管理主要包括任务的创建、删除、挂起、恢复等操作,还包括任务调度器的启动、挂起与恢复,以及使任务进入阻塞状态的延迟函数等。原创 2024-07-25 13:38:58 · 255 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(三)-----FreeRTOS的任务相关概念及任务调度
一、任务相关的一些概念声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、任务相关的一些概念一个嵌入式操作系统的核心功能就是多任务管理功能,FreeRTOS的任务调度器具有基于优先级的抢占式任务调度方法,能满足实时性的要求。原创 2024-07-17 13:51:16 · 340 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(二)-----FreeRTOS的文件组成和基本原理
在具体实现上,这些前缀为“os”的函数调用具体移植的RTOS的实现函数,例如,若移植的是FreeRTOS,“os”函数就调用FreeRTOS的。FreeRTOS的配置和功能裁剪主要是通过文件FeoRTOSConfig.h和FreeRTOS.h中的一些宏定义实现的,前缀为“config”的宏用于配置FreeRTOS的一些参数,前级为“INCLUDE_”的宏用于控制是否编译某些函数的源代码。但是CubeMX自动生成的代码使用的基本都是CMSIS-RTOS接口函数,这些是不需要去更改的,明白两者之间的关系即可。原创 2024-07-08 21:19:17 · 352 阅读 · 0 评论 -
STM32Cube高效开发教程<高级篇><FreeRTOS>(一)-----FreeRTOS基础
一、 FreeRTOS概述声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(高级篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。写在前面:今天就算正式开始高级篇的博客编写了,我本人也是第一次学习FreeRTOS,所以整体的进度会比较慢,博客更新可能不太会及时,希望大家原谅。一、 FreeRTOS概述。原创 2024-06-27 13:14:14 · 1100 阅读 · 0 评论