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的函数

将队列中得数据全部复位为空

删除一个队列 和一个队列信号量

获取一个队列的名称

为队列设置一个编号

获取队列的编号

获取队列的剩余空间个数

获取队列中等待被读取的消息个数

一个查空一个插满

将消息写入队列的后方

信号量

互斥量

相关的函数:

  事件组

信号量

事件组:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489314.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业公户验证API如何使用JAVA、Python、PHP语言进行应用

在纷繁复杂的金融与商业领域,确保每笔交易的安全与合规是至关重要的。而企业公户验证API,正是这样一位默默守护的数字卫士,它通过智能化的手段,简化了企业对公账户验证流程,让繁琐的审核变得快捷且可靠。 什么是企业公…

圣杯依然闪耀 --基于短时RSI的均值回归策略跑出30%年化

圣杯依然闪耀 RSI 永远是我最爱的指标 – 因为潮汐和回归是这个蓝色星球的生命年轮,这样的轮回也存在于交易世界。而 RSI 就是刻画市场中的潮汐和回归的最好指标之一。 年初我介绍过 Connor’s RSI。这次我们将探索 Connors 提出的一个基于短时 RSI 的均值回归策略…

F1冠军版洗地机开售,云鲸能否成为“冠军”?

云鲸,本是一种由风云气象约束为鲸形状而成的大气生物,其遨游苍穹,不染尘埃。而当云鲸“降入尘世”,也代表着一种极简且洁净的品质生活方式。 作为一家专业的清洁机器人企业,以此为名的云鲸将科技清洁与美学设计融为一…

MySQL客户端命令一节将.sql文件导入MySQL

MySql客户端命令 直接输入SQL语句 使用MySQL客户端连接到服务器之后,可以发送SQL语句到服务器执行,并且以;和\g, \G作为结束不同的结束方式显示内容有所不同** TIPS: ;和\g结尾以表格的形式显示结果\G以行的形式显示结果 在连接到服务器之后…

【React】详解受控表单绑定

文章目录 一、受控组件的基本概念1. 什么是受控组件?2. 受控组件的优势3. 基本示例导入和初始化定义函数组件处理输入变化处理表单提交渲染表单导出组件 二、受控组件的进阶用法1. 多个输入框的处理使用多个状态变量使用一个对象管理状态 2. 处理选择框(…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具,进行协作代码开发过程中,最常用的场景为: (1)拉取代码 将git远端仓库最新代码拉取到本地。 (2)提交代码 将本地新增修改的代码提交至git远端仓库中…

Django项目中报错:django.template.exceptions.TemplateDoesNotExist: index.html

访问127.0.0.1:8000访问出错 查看报错原因 到Django项目当中找到settings.py,找到TEMPLATES中的DIRS: 添加如下代码,并导入OS模块: "DIRS": [os.path.join(BASE_DIR,templates)] 再次访问IP地址:

Shell编程之正则表达式与文本三剑客

目录 一、正则表达式 1.引言--什么是正则表达式 1.1正则表达式的功能 2.基础正则表达式(BRE) 2.1特殊字符 2.2定位符 2.3非打印字符 3.扩展正则表达式(ERE) 4.元字符操作的案列 二、命令小工具 1.cut:列截取工具 2.sort排序 …

Footprint Analytics 助力 Core 区块链实现数据效率突破

Core 是一个基于比特币并兼容 EVM 的 Layer 1 区块链,正通过其创新解决方案引革新特币金融。作为首个引入非托管 BTC 质押协议及全球首个发行收益型 BTC ETP 产品的区块链,Core 站在了区块链技术的最前沿。通过利用超过 50% 的比特币挖矿哈希算力&#x…

SQL Server 设置端口号:详细步骤与注意事项

目录 一、了解SQL Server端口号的基础知识 1.1 默认端口号 1.2 静态端口与动态端口 二、使用SQL Server配置管理器设置端口号 2.1 打开SQL Server配置管理器 2.2 定位到SQL Server网络配置 2.3 修改TCP/IP属性 2.4 重启SQL Server服务 三、注意事项 3.1 防火墙设置 3…

《GPT-4o mini:开启开发与创新的新纪元》

在科技发展的快速进程中,OpenAI 推出的 GPT-4o mini 模型如同一阵春风,给开发者们带来了新的希望和机遇。它以其卓越的性能和极具吸引力的价格,成为了行业内热议的焦点。 当我首次听闻 GPT-4o mini 的消息时,内心充满了好奇与期待…

【Gin】Gin框架性能优化:精进应用效率与稳定性的对象池策略(上)

【Gin】Gin框架性能优化:精进应用效率与稳定性的对象池策略(上) 大家好 我是寸铁👊 【Gin】Gin框架性能优化:精进应用效率与稳定性的对象池策略(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分,上部…

C++初学(2)

2.1、其他简单C语句例子 下面这个程序要求运行时输入值 #include <iostream> int main() {using namespace std;int yuanshi;cout << "How many yuanshi do you have?" << endl;cin >> yuanshi;cout << "Here are two more.&q…

过某开源滑动验证码

过某开源滑动验证码 今天早上我有一点空闲时间&#xff0c;想着回顾一下前几天在某查询网站遇到的滑动验证码&#xff0c;以免时间久了忘记了。那个网站可能使用的是较早版本的开源滑块验证码系统tianai-captcha&#xff0c;但我不确定是否正确。 整体思路&#xff1a; 获取…

开始尝试从0写一个项目--前端(三)

器材管理板块 添加器材管理导航 src\views\home\Home.vue src\router\index.js src\views\equipment\Equipment.vue <template><div>hello!</div></template> 测试 搜索导航分页查询 src\views\equipment\Equipment.vue <template><div&…

【React】详解 Redux 状态管理

文章目录 一、Redux 的基本概念1. 什么是 Redux&#xff1f;2. Redux 的三大原则 二、Redux 的核心组件1. Store2. Action3. Reducer 三、Redux 的使用流程1. 安装 Redux 及其 React 绑定2. 创建 Action3. 创建 Reducer4. 创建 Store5. 在 React 应用中使用 Store6. 连接 React…

Apache Flink窗口详解

Apache Flink窗口详解 Apache Flink 的核心功能之一是窗口处理&#xff0c;它允许开发人员以基于时间或基于计数的方式分组和处理数据流。 窗口技术是一种根据某些标准将数据流划分为有限块&#xff08;称为窗口&#xff09;的技术。 窗口&#xff08;Window&#xff09;是处…

活动报名小程序

#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具&#xff0c;包含活动展示&#xff0c;微信支付&#xff0c;订单管理&#xff0c;分享评价等功能。 品客聚精彩&#xff0c;有你才精彩&#xff01;不只有线下活动还可以进行线上裂变活动。 …

HTTP ESP8266 获取天气请求 单片机,嵌入式 2024/7/26 日志

通过http请求获取天气信息: 这里借鉴一下 中国气象局网站举例 首先根据网址 分析: http://weather.cma.cn/ 通过vscode插件:REST Client 发送请求我们会得到内容 首先我们的打开浏览器调试工具查看请求格式 筛选以下几个关键的格式,试着用插件发送请求 GET /web/weather…