0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS用二进制信号量可以减少判断语句的资源消耗

工程师邓生 来源:硬件会 作者:硬件会 2022-09-15 11:43 次阅读

信号量另一种通常的用法是用于任务间的同步机制。

二进制信号量,可以想成是一个布尔类型,只有0 和 1。

两个任务公用一个信号量,一个任务用于产生信号量,另一个任务使用此信号量。

比如:按键按下亮灯,再按一次灯灭。按键任务中按键按下时,将信号量置1。

亮灯任务中将信号量置0。 用二进制信号量可以减少判断语句的资源消耗。

API函数:

SemaphoreHandle_t xHandler; 创建二进制Handler xHandler = xSemaphoreCreateBinary(); 创建一个二进制信号量 返回NULL,或者handler xSemaphoreGive(xHandler); 生产者+1 xSemaphoreTake(xHanlder, timeout); 消费者-1 返回pdPASS, 或者pdFAIL 示例如下:

938356fc-3120-11ed-ba43-dac502259ad0.png

93ae5e42-3120-11ed-ba43-dac502259ad0.png

93d3d820-3120-11ed-ba43-dac502259ad0.png

93edc762-3120-11ed-ba43-dac502259ad0.png

9409095a-3120-11ed-ba43-dac502259ad0.png

系统判断,会占用CPU的很大资源,以上示例中判断按键是否按下,可以用中断处理。在中断中必须调用函数名以FromISR结尾的函数。示例如下:

9427d542-3120-11ed-ba43-dac502259ad0.png

9447f6d8-3120-11ed-ba43-dac502259ad0.png

94593308-3120-11ed-ba43-dac502259ad0.png



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10552

    浏览量

    207812
  • FreeRTOS
    +关注

    关注

    12

    文章

    474

    浏览量

    61531
  • API函数
    +关注

    关注

    0

    文章

    15

    浏览量

    8011

原文标题:FreeRTOS二进制信号量

文章出处:【微信号:硬件会,微信公众号:硬件会】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    二进制处理中的一些技巧

    二进制和十进制的处理中,有时候一些小技巧是很有用的。 1、把十进制数转换成二进制数 (1)在MATLAB中有一个函数dec2bin,
    的头像 发表于 07-05 11:51 175次阅读

    二进制串行计数器工作原理是什么?

    在数字电路设计中,计数器是一种非常关键的组件,用于测量时间、计数事件或跟踪状态变化等。其中,二进制串行计数器作为一种常用的计数器类型,在多种应用场景中都发挥着重要作用。本文将对二进制串行计数器
    的头像 发表于 05-28 15:52 273次阅读

    二进制与逻辑电平的变化范围

    二进制中的两个数字0和1称为位(bit, 是二进制数字binary digit的缩写)。在数字电路中,使用两个不同的电平表示这两个位。一般情况下,1 高电平表示,0低电平表示,这种
    的头像 发表于 02-04 16:54 679次阅读
    <b class='flag-5'>二进制</b>与逻辑电平的变化范围

    鸿蒙二进制数组创建

    背景 c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。 接口
    的头像 发表于 01-31 15:24 980次阅读

    二进制、八进制、十六进制在现实当中有什么意义?

    ,我们可以从数字存储和数据传输的角度来看这些进制的意义。计算机内部使用的是二进制,即由0和1组成的数字系统。这是因为计算机中的所有数据都被转化为二进制形式进行处理和存储。人们使用十
    的头像 发表于 01-16 11:14 994次阅读

    10进制转换为二进制的算法

    进制转换为二进制是计算机科学中非常基础且重要的概念之一。在理解和应用计算机科学的基础知识时,掌握这个算法是至关重要的。 在开始讲解十进制转换为二进制的算法之前,让我们回顾一下十
    的头像 发表于 01-15 10:32 894次阅读

    10进制转换为二进制的算法

    二进制的算法可以分为两个步骤:整数部分转换和小数部分转换。下面将详细介绍这两个步骤。 首先,我们来讨论整数部分的转换。整数部分的转换是比较简单的,我们可以通过不断地进行除2取余的操作来得到
    的头像 发表于 01-11 09:14 1118次阅读

    labview二进制字符串转数值

    LabVIEW是一种图形化编程环境,用于实时数据采集、信号处理以及自动化控制等领域。它采取了数据流编程的思想,用户可以通过将各种功能模块进行连接,轻松搭建起复杂的系统。 在LabVIEW中,二进制
    的头像 发表于 01-05 16:20 1601次阅读

    FreeRTOS信号量的使用与实例

    在嵌入式系统中,任务管理是一个重要的部分,它涉及到任务之间的通信和同步,信号量,队列,互斥锁和事件标志组等概念。本文将以 FreeRTOS 为例,详细讲解这些内容。
    的头像 发表于 12-12 15:25 1104次阅读

    二进制数据及取值范围的计算方法

    本文介绍二进制数据的相关知识,如定义、取值范围计算、转换为十进制的方法以及一些常见位数的二进制数据的取值范围等。
    的头像 发表于 11-08 15:48 1179次阅读
    <b class='flag-5'>二进制</b>数据及取值范围的计算方法

    基于STM32F407的FreeRTOS学习笔记(10)

    在介绍二进制信号量时曾经讲过,二进制信号量可以代替我们裸机开发中的标志位来使用。在裸机开发中我们使用标志位来表示某个事件是否发生,并且其他程
    的头像 发表于 11-08 11:10 475次阅读
    基于STM32F407的<b class='flag-5'>FreeRTOS</b>学习笔记(10)

    基于STM32F407的FreeRTOS学习笔记(8)

    前面几期我们介绍过队列、二进制信号量以及计数信号量。但是在使用二进制信号量的时候会有一种优先级反转问题的出现,简而言之就是低优先级任务因为无
    的头像 发表于 11-08 11:07 534次阅读
    基于STM32F407的<b class='flag-5'>FreeRTOS</b>学习笔记(8)

    基于STM32F407的FreeRTOS学习笔记(7)

    本期在二进制信号量的基础上介绍计数信号量
    的头像 发表于 11-08 11:04 373次阅读
    基于STM32F407的<b class='flag-5'>FreeRTOS</b>学习笔记(7)

    怎么使用ucos的信号量

    应该怎么使用ucos的信号量,在什么情况下使用二进制信号量和数值型信号量
    发表于 10-07 07:41

    如何丢弃函数的二进制代码填入SRAM的二进制代码?

    示例代码有两个步骤可以证明 丢弃函数的二进制代码 。 填充 SRAM 的二进制代码, 然后调用它 。 您可以在下列时间下载样本代码http://www.nuvoton.com/re
    发表于 08-23 06:34