FreeRTOS 二值信号量

2023-05-16

参考 开发手册

二值信号量

简介

二值信号量通常用于互斥访问或同步,二至信号量没有优先级继承,更适合用于同步(任务与任务或任务与中断的同步)。
二值信号量其实就是一个只有一个队列项的队列,这个特殊的队列要么是满的,要么是空的,任务和中断不在乎队列中存的是什么消息,只需要知道这个队列是满的还是空的。可以利用这个机制来完成任务与中断之间的同步。

创建二值信号量

函数描述
vSemaphoreCreateBinary动态创建二值信号量,老版本中使用的API函数。
xSemaphoreCreateBinary动态创建二值信号量,新版本。
vSemaphoreCreateBinaryStatic静态创建二值信号量。

新版本的创建函数没有参数
参数:

xSemaphore  :保存创建成功的二值信号量句柄。
pxSemaphoerBuffer : 此参数指向一个StaticSemaphore_t类型的变量,用来保存信号量结构体。

返回值:

NULL : 二值信号量创建失败。
其他值 : 创建成功的二值信号量句柄。

旧版本:::当二值信号量创建成功以后调用函数xSemaphoreGive()释放二值信号量,此时新创建的二值信号量有效。
新版本::: 在创建成功后不会调用函数xSemaphoreGive()释放二值信号量,默认是无效的。

释放二值信号量

函数描述
xSemaphoreGive()任务级信号量释放函数
xSemaphoreGiveFromISR()中断级信号量释放函数

真正的释放信号量过程是由 xQueueGenericSend()和xQueueGenericSendFromISR()完成 (相当于将信号放入队列中,放进去用释放。。。)

参数 :

pxHigherPriorityTaskWoken 	:	标记退出此函数以后是否进行任务切换,
								这个变量的值是由这三个函数来设置的,用户不用进行设置值,
								用户只需要提供一个变量来保存这个值就行了。
								当此值为pdTRUE的时候在退出中断函数之前一定要进行一次任务切换

返回值:

pdPASS  :  释放信号量成功。
errQUEUE_FULL	:	释放信号量失败。

获取二值信号量

函数描述
xSemaphoreTake()任务级获取信号量函数
xSemaphoreTakeFromISR()中断级获取信号量函数

真正的获取信号量过程是由 xQueueGenericReceive()和xQueueGenericReceiveFromISR()完成 (从队列中拿出来)
参数:

xBlockTime : 阻塞时间。

返回值:

 pdPASS  :  	  获取信号量成功。
 errQUEUE_FULL	:超时,	获取信号量失败。

例如 :

创建  BinarySemaphore=xSemaphoreCreateBinary();	
获取  err=xSemaphoreTake(BinarySemaphore,portMAX_DELAY);
释放  xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken);	//释放二值信号量
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS 二值信号量 的相关文章

  • FreeRTOS例程4-串口DMA收发不定长数据

    FreeRTOS例程4 串口DMA收发不定长数据 知乎 zhihu com
  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • 【FreeRTOS 信号量】互斥信号量

    互斥信号量与二值信号量类似 但是互斥信号量可以解决二值信号量出现的优先级翻转问题 解决办法就是优先级继承 普通互斥信号量创建及运行 参阅安富莱电子demo 互斥信号量句柄 static SemaphoreHandle t xMutex NU
  • FreeRTOS软件定时器创建、复位、开始和停止(备忘)

    目录 一 简介 1 1 开发环境 1 2 摘要 二 STM32CubeIDE配置 三 创建定时器 3 1 头文件声明 3 2 工程文件定义 3 3 创建定时器 3 4 开启 复位 和关闭定时器 四 定时器回调函数 一 简介 1 1 开发环境
  • FreeRTOS系列

    本文主要介绍如何在任务或中断中向队列发送消息或者从队列中接收消息 使用STM32CubeMX将FreeRTOS移植到工程中 创建两个任务以及两个消息队列 并开启两个中断 两个任务 Keyscan Task 读取按键的键值 并将键值发送到队列
  • ZYNQ中FreeRTOS中使用定时器

    使用普通的Timer中断方式时 Timer中断可以正常运行 但是UDP通信进程无法启动 其中TimerIntrHandler是中断服务程序 打印程序运行时间与从BRAM中读取的数据 void SetupInterruptSystem XSc
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • 【FreeRTOS(三)】任务状态

    文章目录 任务状态 任务挂起 vTaskSuspend 取消任务挂起 vTaskResume 挂起任务调度器 vTaskSuspendAll 取消挂起任务调度器 xTaskResumeAll 代码示例 任务挂起 取消任务挂起 代码示例 挂起
  • FreeRTOS临界段和开关中断

    http blog sina com cn s blog 98ee3a930102wg5u html 本章教程为大家讲解两个重要的概念 FreeRTOS的临界段和开关中断 本章教程配套的例子含Cortex M3内核的STM32F103和Co
  • FreeRTOS基础五:软件定时器

    软件定时器简介 软件定时器的作用 在指定的时间到来时执行指定的函数 或者以某个频率周期性地执行某个函数 被执行的函数叫做软件定时器回调函数 软件定时器由FreeRTOS内核实现 不需要硬件支持 软件定时器只有在软件定时器回调函数被调用时才需
  • freertos————互斥锁

    线程安全 多线程程序处于一个多变的环境 可访问的全局变量和堆数据随时可能被其他的线程改变 多个线程同时访问一个共享数据 可能造成严重的后果 出现问题的是之前移植了一个freemodbus的从站 多个任务访问全局变量保持寄存器区 导致最后读出
  • FreeRTOS之软件定时器

    FreeRTOS之软件定时器 声明 本人按照正点原子的FreeRTOS例程进行学习的 欢迎各位大佬指责和批评 谢谢 include sys h include delay h include usart h include led h in
  • 啊哈C的简单使用

    打开啊哈C 新建一个程序输出hello world include
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • RT-Thread记录(五、RT-Thread 临界区保护与FreeRTOS的比较)

    本文聊聊临界区 以及RT Thread对临界区的处理 通过源码分析一下 RT Thread 对临界区保护的实现以及与 FreeRTOS 处理的不同 目录 前言 一 临界区 1 1 什么是临界区 1 2 RTOS中的临界区 二 RT Thre
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • 单片机通信数据延迟问题排查

    1 问题说明 笔者在最近的项目中 发现系统的响应延迟较高 经过排查 排除了单片机运行卡死的问题 2 原因分析 具体排查过程这里就不细致说明了 直接给出排查后原因 任务执行周期规划不合理 导致freertos队列发送接收到的命令有延迟 为了便
  • FreeRTOS 配置TICK_RATE_HZ

    我使用的是带有 5 4 版 FreeRTOS 的 MSP430f5438 我有一个有趣的问题 我无法弄清楚 基本上 当我将 configTICK RATE HZ 设置为不同的值时 LED 闪烁得更快或更慢 它应该保持相同的速率 我将 con
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J

随机推荐

  • vsCode编译器操作git

    用vsCode编译器操作git 超级方便 1 打开cmd拉取项目 2 打开这个项目看一下 3 用vscode打开这个项目 xff0c 是在master分支 xff0c 所以要先新建自己的分支 4 test分支只是个例子哈 5 创建完 xff
  • [Python] ImportError: DLL load failed ... 找不到指定的模块 此类问题解决方法

    文章目录 问题定位结论补充 问题 最近升级 Python 项目 xff0c 由 Python2 7 升级到 Python3 8 3 xff0c 项目使用了 PySide2 xff0c 对于较新的Python3 8 3 PySide2 可能存
  • SVG工具Inkscape使用记录

    1 Q 网上下载的svg xff0c 使用 Inkscape 编辑 xff0c 修改颜色 gt 保存 xff0c 结果颜色并没有修改 A 用文本编辑器打开svg文件 xff0c 删除 path属性中的 fill 61 属性 xff0c 保存
  • [Python] 将py转为 pyc 来保护源码并不实用

    Python 做为一种解释型语言 xff0c 做为服务端程序还好 但如果做为客户端程序 xff0c 就有了暴露源码的问题 很多开发者在寻求安全 便捷的发布程序的方法 比如用pyinstaller xff0c py2exe xff0c 或者转
  • spdlog 封装为 DLL

    项目中需要快速写入巨量日志 xff0c 一开始用的是boost log xff0c 但遇到崩溃问题 xff0c 程序负载大了 xff0c 滚动日志时偶尔会崩溃 xff0c 总是报 xff1a boost filesystem error x
  • 驼峰命名法与下划线命名法之争

    窃以为 xff0c 驼峰命名开发效率更高 xff0c 原因如下 xff1a 下划线命名多输入一个字符 例如 xff1a set name 对比 setName xff0c 多输入一个下划线字符 xff0c 敲击键盘两次Shift 43 而驼
  • [PyQt] 在QLabel上用drawText实现文字滚动

    span class token keyword from span PyQt4 span class token punctuation span QtGui span class token keyword import span sp
  • [PyQt] PyQt4写的音乐播放器

    实现了 xff1a 播放歌曲 xff1b 上 下一首 xff1b 随机 循环 单曲循环 xff1b 批量添加 删除歌曲 xff1b 打开 存储播放列表 xff08 M3U格式 xff09 xff1b 添加到收藏 xff1b 单行 多行歌词桌
  • [PyQt] 使用.qrc 生成资源文件供程序中使用

    建立 images qrc文件 xff0c 里面保存了资源位置 xff1a span class hljs doctype lt DOCTYPE RCC gt span span class hljs tag lt span class h
  • Tcl/tk实例-工具栏和菜单-图片预览工具

    可以打开并查看图片 xff0c 点击工具栏上 Previous 和 Next 按钮来浏览 前 下 一张 仅仅是一个例子 xff0c 其它按钮和菜单未添加命令 package require Ttk package require Img p
  • Tcl/tk实例—使用tclkit工具将脚本打包成可执行文件(.exe)

    下载 tclkit exe 工具 xff0c 及 sdx kit 文件 复制一份tclkit exe xff0c 命名为tclkit2 exe 假设你的脚本文件为 xff1a app tcl Step1 命令行执行 tclkit exe s
  • C语言将十进制转换成十六进制

    include lt stdio h gt main char arr 50 61 34 34 char p 61 arr int i scanf 34 d 34 amp i 输入一个十进制的数 int result 61 0 while
  • 软件版本中的release,stable,alpha,beta,pre,snapshot

    转自 xff1a https www jianshu com p aefe0453d081 我们在下载软件会遇到诸如release stable alpha beta pre current eval rc snapshot等版本 xff0
  • kylin ubuntu20.04使用记录

    1 配置dns vim etc systemd resolved conf 修改 DNS 61 119 29 29 29 223 5 5 5 多个DNS地址使用空格分隔 2 配置samba sudo vim etc samba smb co
  • linux进程、线程状态 tomcat线程数 并发数查看

    1 linux进程查看 ps aux top USER PID CPU MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0 0 0 0 10368 116 Ss Jan16 4 57 init
  • 字符编码(三) 字节序、bit序、 有效位

    1 字节序 xff1a 一个 xff08 占多字节的 xff09 数据单元的字节顺序 Java中byte没有字节序问题 xff0c 其他都有字节序问题 不必考虑byte内部bit的细节 bit序 xff1a 一个字节内 xff0c bit的
  • STM32:串口发送

    1 main c代码如下 include stm32f10x h nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Device header include Delay h include OLED
  • 太阳晒进屋里 太刺眼懒得起来关窗帘?做一个光感遥控吧

    在一个智能音响的交流群里 xff0c 有位群友提出了个想法 xff0c 家里太阳晒进屋里每次都要起来拉窗帘 xff0c 有没有什么办法可以让太阳晒进屋就关窗帘 xff0c 没太阳了又打开窗帘能 xff1f 后来这位群友找到我 xff0c 我
  • 用Python爬虫获取NBA球员的生涯数据

    NBA球迷往往对球员的各项数据以及对应的排名很感兴趣 xff0c 而basketball reference com这个网站的数据十分详尽 为方便浏览 xff0c 我在github建了一个项目 xff0c 借助该网站提供的数据来汇总某个球员
  • FreeRTOS 二值信号量

    参考 开发手册 二值信号量 简介 二值信号量通常用于互斥访问或同步 xff0c 二至信号量没有优先级继承 xff0c 更适合用于同步 xff08 任务与任务或任务与中断的同步 xff09 二值信号量其实就是一个只有一个队列项的队列 xff0