当前位置: 首页 > news >正文

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

效果&#xff1a; 文字长度自适应&#xff0c;自动居中到parent&#xff0c;会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…...

自动化测试 pytest 中 scope 限制 fixture使用范围!

导读 fixture 是 pytest 中一个非常重要的模块&#xff0c;可以让代码更加简洁。 fixture 的 autouse 为 True 可以自动化加载 fixture。 如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办&#xff1f;可不可以只运行一次初始化方法&#xff1f; 答&#xf…...

软件-vscode-plantUML-drawio

文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 &#xff08;包括spring data jpa和sqlLite连接&#xff09; PlantUMLDrawio基础实操 vscode 基础 命令 启动mysql命令 docker run --name mysql-container -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d my…...

Python爬虫实战案例(爬取图片)

爬取图片的信息 爬取图片与爬取文本内容相似&#xff0c;只是需要加上图片的url&#xff0c;并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站&#xff08;彼岸壁纸https://pic.netbian.com&#xff09;进行爬取。 具体步骤如下&#xff1a; …...

智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界

一、方案背景 科技高速发展的今天&#xff0c;工地施工已发生翻天覆地的变化&#xff0c;传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题&#xff0c;人力资源的不足也进一步加剧了监管不到位的局面&#xff0c;严重影响了施工进度质量和安全。 视频监控…...

ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式

在ASP.NET Web Forms中&#xff0c;并没有严格意义上的“六大对象”&#xff0c;但通常我们指的是与HTTP请求和响应处理紧密相关的几个内置对象。以下是这些对象及其功能、使用方式以及简单的实现源码示例&#xff1a; Response对象 功能&#xff1a;用于向客户端发送HTTP响应…...

Elastic 及阿里云 AI 搜索 Tech Day 将于 7 月 27 日在上海举办

活动主题 面向开发者的 AI 搜索相关技术分享&#xff0c;如 RAG、多模态搜索、向量检索等。 活动介绍 参加 Elastic 原厂与阿里云联合举办的 Generative AI 技术交流分享日。借助 The Elastic Search AI Platform&#xff0c; 使用开放且灵活的企业解决方案&#xff0c;以前所…...

基于ssm+vue医院住院管理系统源码数据库

摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生活中必不可少的场所。如今&#xff0c;已经2021年了&#xff0c;虽然医院的数量和设备愈加完善&#xff0c;但是老龄人口也越来越多。在如此大的人口压力下&#xff0c;医院住院就变成了一个…...

【在排序数组中查找元素的第一个和最后一个位置】python刷题记录

R2-分治 有点easy的感觉&#xff0c;感觉能用哈希表 class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:nlen(nums)dictdefaultdict(list)#初始赋值哈希表&#xff0c;记录出现次数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中&#xff0c;squeeze和unsqueeze是Tensor的一个重要方法&#xff0c;同时它们也是torch模块中的一个函数&#xff0c;它们的语法如下所示。 Tensor.…...

PHP压缩打包,下载目录或者文件,解压zip文件

函数 /*** 压缩整个文件夹为zip文件* 本地需要绝对路径&#xff0c;服务器需要相对路径*/function makeZipFile($zip_path , $folder_path ) {$rootPath realpath($folder_path);$zip new ZipArchive(); // $zip->open($zip_path, ZipArchive::CREATE | ZipArchi…...

后端面试题日常练-day08 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 Java中的静态变量和实例变量有何区别&#xff1f; a) 静态变量属于类&#xff0c;实例变量属于对象 b) 静态变量只能在静态方法中访问&#xff0c;实例变量只能在实例方法中访问 c) 静态变量在类加载时…...

Linux:core文件无法生成排查步骤

1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0&#xff0c;就临时添加环境变量ulimit -c unlimited&#xff0c;之后在启动程序观察是否有core生成&#xff0c;如果…...

大模型学习资源

上一篇扯了一堆废话&#xff0c;关于大模型&#xff0c;提供一下建议 说实话&#xff0c;大模型更新太快&#xff0c;以我30岁的高龄实在不适合再去研究技术。偶然发现&#xff0c;国内的大模型厂家在做推广的培训。比如上海人工智能实验室&#xff0c;阿里&#xff0c;百度。…...

约定(模拟赛2 T3)

题目描述 小A在你的帮助下成功打开了山洞中的机关&#xff0c;虽然他并没有找到五维空间&#xff0c;但他在山洞中发现了无尽的宝藏&#xff0c;这个消息很快就传了出去。人们为了争夺洞中的宝藏相互陷害&#xff0c;甚至引发了战争&#xff0c;世界都快要毁灭了。小A非常地难…...

Java推送xml数据进行http请求

将json转成xml数据进行推送&#xff0c;打印出最终推送xml的数据格式&#xff0c;再调整代码 直接上代码&#xff0c;详情请看代码注释 public void pushReceipt(JSONObject jsonObj) {try {// 创建 XML 文档Document doc createXmlDocument();// 构建 XML 结构Element rootE…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...