freertos的学习cubemx版
HAL 库的freertos
1 实时
2 任务->线程
3 移植
CMSIS_V2 V1版本
NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15
编码规则,
变量名 :类型前缀,
c - char
S - int16_t
L - int32_t
U - unsigned
Uc - uint8_t
Us - uint16_t
指针变量 需要再变量前加一个P
非标准的类型变量名 X
ux是Ubasetype_t 类型的前缀
函数名:有返回值类型和文件所在组成
xTaskCreate() 这个就是返回类型为BaseType_t 在文件名 task.h定义
vQueueDelete() 返回值类型为void 在文件queue.h定义
pcTimerGetName() 返回值为 char * 在timer.h定义
CMSIS RTOS相关文件定义的函数前缀为 os 不包过返回值类型和所在文件的前缀
例如cmsis_os2.h中得函数osThreadNew().
FreeRTOS的配置和功能裁剪 主要是通过文件 FreeRTOSConfig.h和FreeRTOS.h中得一些宏定义实现的。

Cubemx中得FreeRTOS的 config parameters 配置
MPU/FPU 内存保护单元 和 浮点数单元功能
任务管理:调度器
任务状态:
就绪状态 任务被创建后就进入了就绪状态,就绪任务的优先级高于当前运行任务的优先
级,它就会进入运行状态,如果低于当前任务优先级 他依然是就绪状态
运行状态 正在运行任务状态,如果处于运行态的高优先级任务一直在运行时就会导致低
优先级的就绪态不能够运行,需要使用vTaskSuspend 进入挂起态或者进入阻塞态。
阻塞状态 让任务暂时跳出占用cpu的使用权,处于一种等待状态。通过延时函数
vTaskDelay() 或者 vTaskDelayUntil()进入阻塞状态 ,等待时间达到后,任务进入就绪状态,在下一次的任务调度中进行运行。第二个就是通过进程之间通讯的时间请求函数,例如请求信号量的函数xSemaphoreTake() 运行这个函数后,任务会进入阻塞状态等待信号量和其他函数的延迟。
挂起状态 挂起状态的任务就是不进行调度的任务,需要其他任务进行调用函数,
vTaskResume()进入就绪状态
抢占式和合作式

任务的优先级:总优先级个数是由 FreeRTOSConfig.h中宏congfigMAX_PRIORITIES来定义默认56 数字越小优先级越低
空闲任务:osKernelStart()启动FreeRTOS的任务调度器时 会自动创建一个空闲任务 ldle task 空闲任务的优先级别为 0
主要配置参数:
congfigUSE_TICK_HOOK 是否使用空闲函数的钩子函数 配置1 则可以利用空闲任务的钩子函数,系统空闲时做一些处理
congfigIDLE_SHOULD_YIELD 空闲任务是否对同优先级的任务主动让出cpu控制权
congfigUSE_TICKLESS_IDLE 是否在空闲任务时关闭基础时钟,若配置1 可实现系统低功耗
任务调度方法

抢占式调度方法

上下文切换是通过汇编语言写的 在上面这个函数里面实现了任务调度
任务管理工具函数 :
获取任务句柄的三个函数
![]()
![]()
![]()
获取或者改变任务优先级:
获取
![]()
![]()
改变
![]()
获取任务信息
![]()
获取任务名称
![]()
任务栈空间 偏小越容易溢出
![]()
任务的状态
![]()
任务数量
![]()
返回所有任务的列表信息 内存消耗比较大
![]()
获得所有任务的状态
![]()
运行时间 运行时会禁止中断
![]()
返回调度器的状态
![]()
taskENTER_CRITICAL() 和 taskEXIT_CRITICAL( ) 实现开关中断





这些中断屏蔽函数只能屏蔽freertos的中断,不能够屏蔽 硬件中断 ,


硬件触发和软件触发的某些中断是 不可以调用 freertos的api函数,因为这些中断不是freertos的一个任务
进程间通信与消息队列:queue消息队列


队列 queue : 一个缓冲区 在进程间传递少量的数据 被称为 消息队列
信号量 semaphore: 分为而知信号量和技术信号量 二值信号量适用于进程间同步 计数
信号量一般用于共享资源的管理
互斥量 Mutex : 互斥量和递归互斥量 -----互斥量具有优先级继承机制,减少优先级翻转
事件组 Event Group : 事件组可以用于多个时间触发一个和多个任务运行 实现事件的 广播 还可以实现多个任务的同步运行
流缓冲区和消息缓冲区 : v10版本功能,用于优化进程间通信机制 应用于只有一个 写入者和读取者 适用于多核cpu的内核之间传输数据

队列的特点和基本操作
![]()

![]()
这个函数可以读取数据 读完数据后 就会删除队列

这个函数可以读取数据 读完数据后 不会删除这个队列
![]()
在中断服务程序 isr中操作队列的话就需要 运行这种带有fromisr的函数

将队列中得数据全部复位为空
![]()
删除一个队列 和一个队列信号量
![]()
获取一个队列的名称
![]()
为队列设置一个编号
![]()
获取队列的编号
![]()
获取队列的剩余空间个数
![]()
获取队列中等待被读取的消息个数
![]()
一个查空一个插满
![]()
将消息写入队列的后方
![]()
![]()
信号量


互斥量



相关的函数:


事件组 :
信号量

事件组:






相关文章:
freertos的学习cubemx版
HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则, 变量名 :类型前缀, c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…...
PyQt 信号与槽功能
PyQt 信号与槽功能 基本概念:在 PyQt 中,信号(Signal)与槽(Slot)是一种用于对象之间通信的机制。信号可以由一个对象发出,而槽是用于接收信号并执行相应操作的函数。 信号 信号是在 PyQt 的类…...
navicat premium安装和破解
https://blog.csdn.net/qq1031893936/article/details/90264688 提示信息 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
OSI七层模型
OSI(Open System Interconnect),即开放式系统互连。 该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 ),即OSI开放系统互连参考模型。 应用层 为用…...
Qt自定义MessageToast
效果: 文字长度自适应,自动居中到parent,会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…...
自动化测试 pytest 中 scope 限制 fixture使用范围!
导读 fixture 是 pytest 中一个非常重要的模块,可以让代码更加简洁。 fixture 的 autouse 为 True 可以自动化加载 fixture。 如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办?可不可以只运行一次初始化方法? 答…...
软件-vscode-plantUML-drawio
文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLDrawio基础实操 vscode 基础 命令 启动mysql命令 docker run --name mysql-container -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d my…...
Python爬虫实战案例(爬取图片)
爬取图片的信息 爬取图片与爬取文本内容相似,只是需要加上图片的url,并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站(彼岸壁纸https://pic.netbian.com)进行爬取。 具体步骤如下: …...
智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界
一、方案背景 科技高速发展的今天,工地施工已发生翻天覆地的变化,传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题,人力资源的不足也进一步加剧了监管不到位的局面,严重影响了施工进度质量和安全。 视频监控…...
ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式
在ASP.NET Web Forms中,并没有严格意义上的“六大对象”,但通常我们指的是与HTTP请求和响应处理紧密相关的几个内置对象。以下是这些对象及其功能、使用方式以及简单的实现源码示例: Response对象 功能:用于向客户端发送HTTP响应…...
Elastic 及阿里云 AI 搜索 Tech Day 将于 7 月 27 日在上海举办
活动主题 面向开发者的 AI 搜索相关技术分享,如 RAG、多模态搜索、向量检索等。 活动介绍 参加 Elastic 原厂与阿里云联合举办的 Generative AI 技术交流分享日。借助 The Elastic Search AI Platform, 使用开放且灵活的企业解决方案,以前所…...
基于ssm+vue医院住院管理系统源码数据库
摘 要 随着时代的发展,医疗设备愈来愈完善,医院也变成人们生活中必不可少的场所。如今,已经2021年了,虽然医院的数量和设备愈加完善,但是老龄人口也越来越多。在如此大的人口压力下,医院住院就变成了一个…...
【在排序数组中查找元素的第一个和最后一个位置】python刷题记录
R2-分治 有点easy的感觉,感觉能用哈希表 class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:nlen(nums)dictdefaultdict(list)#初始赋值哈希表,记录出现次数for num in nums:if not dict[num]:dict[num]1else:dict[…...
Pytorch基础:Tensor的squeeze和unsqueeze方法
相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,squeeze和unsqueeze是Tensor的一个重要方法,同时它们也是torch模块中的一个函数,它们的语法如下所示。 Tensor.…...
PHP压缩打包,下载目录或者文件,解压zip文件
函数 /*** 压缩整个文件夹为zip文件* 本地需要绝对路径,服务器需要相对路径*/function makeZipFile($zip_path , $folder_path ) {$rootPath realpath($folder_path);$zip new ZipArchive(); // $zip->open($zip_path, ZipArchive::CREATE | ZipArchi…...
后端面试题日常练-day08 【Java基础】
题目 希望这些选择题能够帮助您进行后端面试的准备,答案在文末 Java中的静态变量和实例变量有何区别? a) 静态变量属于类,实例变量属于对象 b) 静态变量只能在静态方法中访问,实例变量只能在实例方法中访问 c) 静态变量在类加载时…...
Linux:core文件无法生成排查步骤
1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0,就临时添加环境变量ulimit -c unlimited,之后在启动程序观察是否有core生成,如果…...
大模型学习资源
上一篇扯了一堆废话,关于大模型,提供一下建议 说实话,大模型更新太快,以我30岁的高龄实在不适合再去研究技术。偶然发现,国内的大模型厂家在做推广的培训。比如上海人工智能实验室,阿里,百度。…...
约定(模拟赛2 T3)
题目描述 小A在你的帮助下成功打开了山洞中的机关,虽然他并没有找到五维空间,但他在山洞中发现了无尽的宝藏,这个消息很快就传了出去。人们为了争夺洞中的宝藏相互陷害,甚至引发了战争,世界都快要毁灭了。小A非常地难…...
Java推送xml数据进行http请求
将json转成xml数据进行推送,打印出最终推送xml的数据格式,再调整代码 直接上代码,详情请看代码注释 public void pushReceipt(JSONObject jsonObj) {try {// 创建 XML 文档Document doc createXmlDocument();// 构建 XML 结构Element rootE…...
2026 最新 6 款漏洞扫描工具!一篇全覆盖
渗透测试收集信息完成后,就要根据所收集的信息,扫描目标站点可能存在的漏洞了,包括我们之前提到过的如:SQL注入漏洞、跨站脚本漏洞、文件上传漏洞、文件包含漏洞及命令执行漏洞等,通过这些已知的漏洞,来寻找…...
NotebookLM音乐学应用的5个致命误区(附诊断清单),90%新手在第3步就误入歧途导致文献溯源失效
更多请点击: https://intelliparadigm.com 第一章:NotebookLM音乐学研究辅助的底层逻辑与适用边界 NotebookLM 本质是一个基于用户上传文档构建私有语义索引的轻量级 AI 助手,其核心并非通用大模型的自由生成,而是“引用驱动型推…...
基于CRICKIT与蓝牙的双足机器人:从机械原理到手机遥控实践
1. 项目概述:一个会“翻跟头”的蓝牙机器人如果你玩腻了循迹小车或者舵机云台,想做一个动作更“魔性”、互动性更强的机器人,那么这个基于CRICKIT和Feather M0 Bluefruit的双足机器人绝对能让你眼前一亮。它走起路来不是平稳前进,…...
Armbian重置前的数据保卫战——备份与迁移的5层防护策略
备份就像买保险——平时觉得麻烦,出事时觉得买少了。 引言:那个让我彻夜未眠的晚上 凌晨三点,我的香橙派突然失联了。 SSH连不上,ping不通,插显示器一看——文件系统只读,内核panic。前一天刚折腾完Docker网络配置,手贱改了个内核参数,重启后直接翻车。 那一刻,我脑…...
如何提升SQL存储过程逻辑复用_封装通用存储过程函数
SQL Server无函数式存储过程,需用标量函数(单值计算)或表值函数(结果集)替代;标量函数禁用DML和非确定性函数,ITVF性能优于MSTVF;MySQL函数须声明DETERMINISTIC等属性;跨…...
基于Argo Tunnel的轻量级容器PaaS部署实践
1. 项目概述与核心价值最近在折腾容器化部署和边缘计算场景时,我一直在寻找一个足够轻量、灵活且能快速拉起服务的方案。传统的Kubernetes集群对于小型项目或个人开发者来说,学习成本和运维负担都太重了,而单纯的Docker Compose又缺乏服务发现…...
PHPExcel样式继承机制:减少代码冗余的终极指南
PHPExcel样式继承机制:减少代码冗余的终极指南 【免费下载链接】PHPExcel ARCHIVED 项目地址: https://gitcode.com/gh_mirrors/ph/PHPExcel 在处理Excel文件时,重复设置单元格样式不仅耗时还会导致代码臃肿。PHPExcel作为一款强大的PHP电子表格处…...
【模块化设计-10】UART1 驱动 + 环形 FIFO 实现高效串口数据收发
在嵌入式开发中,串口(UART)是最常用的通信接口之一,而直接采用中断 缓冲区的方式处理串口数据,能有效避免数据丢失、提升收发效率。本文将基于实际项目代码,详解UART1 驱动与环形 FIFO(ring_fi…...
告别手动标注!用TableBank数据集+Detectron2,快速搞定表格检测模型训练
零基础实战:基于TableBank与Detectron2的工业级表格检测方案 在金融报表解析、医疗档案数字化等场景中,表格检测作为文档智能处理的第一道关卡,其准确性直接影响后续信息提取的成败。传统人工标注数据的方式不仅成本高昂,更面临版…...
利用CTranslate2与INT8量化,实现Whisper语音识别7倍加速
1. 项目概述:当Whisper遇上CTranslate2,语音转文字的“涡轮增压”如果你尝试过OpenAI的Whisper模型来做语音识别,大概率会被它的准确性所折服,但同时也可能被其缓慢的推理速度所困扰。尤其是在处理长音频文件或需要批量处理时&…...
