首页 > 其他分享 >FreeRTOS学习随记-3

FreeRTOS学习随记-3

时间:2024-12-09 21:11:30浏览次数:5  
标签:信号量 优先级 FreeRTOS 通知 学习 互斥 任务 事件 随记

09-2_信号量的常规使用

  • 二进制信号量实现互斥
    • 要先把信号量写入
  • 计数型信号量实现同步
    • 但是要注意,让ready状态/读取信号量的任务的优先级高于running态/写信号量的任务,或者让写信号量的任务在写完主动让出

10-1_互斥量的理论讲解

  • 正常实现互斥要谁上锁谁解锁,所以引入互斥量
  • 但是互斥量也没实现上边这一点
  • 优先级反转和优先级继承,通过优先级继承解决优先级反转

10-2_互斥量的常规使用

  • 优先级反转是指的通过二进制应该Give信号量让高优先级任务Take后执行,结果却是另一个低优先级的任务抢占执行了,让高优先级task无法执行。
  • 优先级继承是高优先级人把自己的优先级给低优先级任务,低优先级完成后再把优先级还给高优先级,让中等优先级的任务没有机会抢占。

10-3_互斥量的缺陷和递归锁

  • 互斥量必须实现谁持有谁释放
  • 但是一般的互斥量并不能实现上边的需求,例如:
    • xSemaphoreTake和xSemaphoreGive
  • 所以引入递归锁---只能由拥有者开锁,谁锁的门谁开锁

11-1 事件组的理论讲解

  • 每个bit代表一个事件
  • 等待事件组要么是全部时间要么是其中某一个
    • 等待要求是可以设置的

11-2 _事件组的使用_等待事件

  • 事件组是不能传递数据的,传递数据需要其他的方式来
  • 通过事件组来等待事件完成,然后队列传递数据

11-3 _事件组的使用_同步点

  • xEventGroupSync()表示自己做好了

12-1 任务通知理论讲解

  • 任务通知不需要单独创建,不需要一个公共结构体来实现独写操作
  • 任务结构体中就包含了内部对象,可以直接接收别的任务发过来的“通知”
  • 其他方式是多对多,任务通知是多对一
  • 其他任务放数据时不需要等待,要么成功要么失败,不会进入阻塞状态
  • 目标任务可以等待,无数据时;有数据即刻返回
  • 他的结构体灭有两个链表,只有一个通知状态,这个状态是给自己使用
  • 通过任务通知可以实现其他的模式,例如队列,事件,事件组等

12-2 _任务通知使用_轻量级信号量

  • 可以选择Take完就清空,也可以一次次Take全部

12-3 _任务通知使用_轻量级队列

  • 不需要创建队列
  • 把val房间TCB中,可以选择覆盖或者不覆盖
  • 任务1往队列中放十个数据,任务2就可以取十次数据
  • 任务通知就直接任务1通知任务2使用句柄

12-4 任务通知使用轻量级事件组

  • 不能指定等待的具体事件

标签:信号量,优先级,FreeRTOS,通知,学习,互斥,任务,事件,随记
From: https://www.cnblogs.com/wuangmingyu/p/18596032

相关文章

  • FreeRTOS学习随记-4
    13-1定时器的理论介绍Tick中断调用timer函数的回调函数--Linux在某个任务中执行--RTOS把任务写入队列通知守护任务,队列要是满了需要等待定时器的超时函数在守护任务中执行13-2定时器的一般使用启动定时器实际上是把任务发给队列守护任务的优先级更高会切换到守护任务,......
  • 重生之我在学Vue-- Vue3 学习路径总览
    重生之我在学Vue--Vue3学习路径总览文章目录重生之我在学Vue--Vue3学习路径总览前言Day1-10:基础阶段Day1:Vue3基础与开发环境搭建Day2:CompositionAPI与响应式系统Day3:模板语法与指令Day4:组件化开发Day5:路由管理(VueRouter)Day6:状态管理(Pinia)Day7:数据请求(A......
  • 次小生成树学习笔记
    严格次小生成树前置芝士最小生成树|倍增LCA定义如果最小生成树选择的边集是\(E_M\),严格次小生成>树选择的边集是\(E_S\),那么需要满足:(\(value(e)\)表示边\(e\)的权值)\(\sum_{e\inE_M}value(e)<\sum_{e\inE_S}value(e)\)。也就是说,严格次小生成树的边权和一定是......
  • 算法学习 - Huffman树
    题目:输入N个权值(1-100正整数),建立哈夫曼树Note:一次遍历找出序列中最小数和次小数:如果序列只有一个数,返回这个数遍历这个序列,对每个数:如果这个数比最小数小,更新原来的次小数为最小数,更新原来的最小数为这个数;如果这个数不比最小数小,但比次小数小,更新原来的次小数为这个数。......
  • Java Web 开发学习中:过滤器与 Ajax 异步请求
    一、过滤器Filter:过滤器的概念与用途在一个庞大的Web应用中,有许多资源需要受到保护或进行特定的预处理。过滤器就像是一位智能的守卫,站在资源的入口处,根据预先设定的规则,决定哪些请求可以顺利访问资源,哪些请求需要被拦截或进行特殊处理。比如,在众多页面中,判断用户是否登录......
  • JavaScript学习
    关于jsJavaScript是一种动态的、弱类型的解释型语言,最初设计用于浏览器端的交互。特点轻量级:语法简单,入门门槛低。跨平台:支持在浏览器、Node.js等多种环境中运行。解释型:无需编译,直接在运行时执行。事件驱动:非常适合处理异步任务,如用户交互、网络请求等。核心概念变......
  • 【学习笔记】树分治
    点分治普通的分治在一段子段\([l,r]\)中处理和\(mid\)有关的信息然后递归处理\([l,mid)\)和\((mid,r]\)。由于中点的优秀性质这种看似暴力的做法实际复杂度是\(O(n\logn)\)的。点分治是一种把分治思想运用到树上解决问题的算法(但是其实更多人愿意称其为数据结构?)。它一......
  • IO进程学习笔记(持续更新)
    1、IO进程大量的函数接口(70多)记住函数名+函数的功能。大量的笔试题,面试题。先记住,在理解。函数只要是用封装好的。2、man手册普通命令。系统调用的函数。库函数。特殊文件。文件格式。游戏。附加的一些变量3、IO介绍I:input输入O:output输出对文件的输入和输......
  • MySQL学习笔记Day5
    一、基本函数就像是编程语言的函数一样,可以把复杂的功能封装到函数里,供使用者调用。1、数字函数函数功能用例ABS绝对值ABS(-100)ROUND四舍五入ROUND(4.62)FLOOR强制舍位到最近的整数FLOOR(9.9)CEIL强制进位到最近的整数CEIL(3.2)POWER幂函数POWER(2,3)LOG对数函数LOG(7,3)LN......
  • OpenAI发布强化学习微调技术
    前排提示,文末有大模型AGI-CSDN独家资料包哦!OpenAI在12天产品发布活动的第二天,推出基于强化学习的模型微调技术(ReinforcementFine-tuning,简称RFT)。这项技术将帮助开发者和机构用少量数据打造专业领域的AI模型。技术创新亮点•强化学习算法:不同于传统监督式微调,采用强化......