当前位置: 首页 > 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的函数

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

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

获取一个队列的名称

为队列设置一个编号

获取队列的编号

获取队列的剩余空间个数

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

一个查空一个插满

将消息写入队列的后方

信号量

互斥量

相关的函数:

  事件组

信号量

事件组:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Web前端:HTML篇(四)头部head标签与样式表的导入
  • c语言第四天笔记
  • 萝卜快跑:自动驾驶的先锋与挑战
  • unity基础问题
  • 后端开发刷题 | 笔试
  • 【React】详解样式控制:从基础到进阶应用的全面指南
  • react中如何mock数据
  • Dav_笔记10:Using SQL Plan Management之4
  • 实战:Redis实现排行榜、点赞和关注功能的基本操作
  • 谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码
  • mysql中You can’t specify target table for update in FROM clause错误
  • Android SurfaceFlinger——GraphicBuffer内存申请(三十)
  • 基于Pytorch框架的深度学习densenet121神经网络鸟类行为识别分类系统源码
  • 从json到protobuf,接口效率的提升
  • 领略诗词之妙,发觉生活之美。
  • JavaScript 如何正确处理 Unicode 编码问题!
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • axios 和 cookie 的那些事
  • Flannel解读
  • Hibernate最全面试题
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java Agent 学习笔记
  • Lucene解析 - 基本概念
  • Python语法速览与机器学习开发环境搭建
  • Unix命令
  • Vue小说阅读器(仿追书神器)
  • 诡异!React stopPropagation失灵
  • 前端技术周刊 2019-02-11 Serverless
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • (11)MATLAB PCA+SVM 人脸识别
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C#)一个最简单的链表类
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Scala的“=”符号简介
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET CLR Hosting 简介
  • .net 获取url的方法
  • .NET 指南:抽象化实现的基类
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net和jar包windows服务部署
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • /usr/bin/env: node: No such file or directory
  • ?
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [20161101]rman备份与数据文件变化7.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)