RTT-信号量

2023-11-09

RTT-信号量

概念

信号量就是一个标记位,释放信号量就是标记位加一,获取信号量后自动减一,减到0后不能再获取了。
信号量(Semaphore)是一种实现线程间通信的机制,实现线程之间同步或临界资源的互斥访问,常用于协助一组相互竞争的线程来访问临界资源。在多线程系统中,各线程之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。

接口

创建静态信号量

rt_err_t rt_sem_init (rt_sem_t sem, const char *name, rt_uint32_t value, rt_uint8_t flag)

删除静态信号量

rt_err_t rt_sem_detach (rt_sem_t sem)

创建动态信号量

rt_sem_t rt_sem_create (const char *name, rt_uint32_t value, rt_uint8_t flag)

删除动态信号量

rt_err_t rt_sem_delete (rt_sem_t sem)

获取信号量

rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time)

释放信号量

rt_err_t rt_sem_release (rt_sem_t sem)

用法

  1. 定义信号量控制块
  2. 创建信号量
  3. 释放信号量
  4. 获取信号量
/* 按键释放信号量 */
static rt_thread_t key0_thread = RT_NULL;
static rt_thread_t key1_thread = RT_NULL;
/* 定义信号量控制块 */
static rt_sem_t test_sem = RT_NULL;

/* 创建一个信号量 */
test_sem = rt_sem_create("test_sem",/* 信号量名字 */
                         5,     /* 信号量初始值 */
                         RT_IPC_FLAG_FIFO); /* 信号量模式 FIFO(0x00)*/
if (test_sem != RT_NULL)
   rt_kprintf("create sem success\n\n");

/* 定义信号量控制块 */
static void key0_thread_entry(void *parameter)
{
    rt_err_t uwRet = RT_EOK;

    while (1)
    {
        if (Key_Scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON)/* K1 被按下 */
        {
            uwRet = rt_sem_release(test_sem);     //释放信号量
            if (RT_EOK != uwRet)
            {
                rt_kprintf("release failed:%lx\n", uwRet);
            }
            else
            {
                rt_kprintf("release one sem\n");
            }
        }

        rt_thread_delay(20);
    }


}

/* 按键获取信号量 */
static void key1_thread_entry(void *parameter)
{
    rt_err_t uwRet = RT_EOK;
    while (1)
    {
        if (Key_Scan(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == KEY_ON)       //如果KEY2被单击
        {
            /* 获取一个计数信号量 */
            uwRet = rt_sem_take(test_sem, 0);  /* 获取信号量 */
            if (RT_EOK == uwRet)
                rt_kprintf("take one sem\r\n");
            else
                rt_kprintf("up\r\n");

        }
        rt_thread_delay(20);     //每20ms扫描一次

    }

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTT-信号量 的相关文章

  • RT-Thread中AT组件连接ESP8266 模块

    应用 AT 组件连接 ESP8266 模块 本文介绍 智龙开发板 应用AT组件 连接 esp8266 模块 从而连接无线网络 参考官网 应用 AT 组件连接 ESP8266 模块 1 首先去除 lwip 2 连接硬件模块 连接到智龙开发板的
  • RT-Thread分析-对象容器实现与作用

    目录 1 前言 2 相关数据结构 2 1 对象 1 类型 2 数据结构 2 3 容器 1 数据结构 2 容器定义 object container 2 3 对象容器链接图 3 获取对象容器 rt object get information
  • [C++] 线程同步的四种方式和demo

    源码路径 dangwei 90 ThreadSync 线程同步 github com https github com dangwei 90 ThreadSync 编译平台 win10 编译工具 vs2019 语音 C 线程同步的四种方式
  • 【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据

    eeprom 说明 eeprom介绍 AT24C01A 1K串行EEPROM 内部组织16页8字节 1K需要一个7位数据字地址进行随机字寻址 AT24C02 2K串行EEPROM 内部组织32页8字节 2K需要一个8位数据字地址进行随机字寻
  • 内核7-线程间同步

    目录 1 信号量 1 1 信号量机制 1 2 信号量的使用场合 1 2 1 线程同步 1 2 2 锁 1 2 3 中断与线程的同步 1 2 4 资源计数 1 3 信号量控制块 1 4 函数 1 4 1 rt sem init 函数 1 4
  • 【原创】linux实时操作系统xenomai x86平台基准测试(benchmark)

    一 前言 benchmark 即基准测试 通常操作系统主要服务于应用程序 其运行也是需要一定cpu资源的 一般来说操作系统提供服务一定要快 否则会影响应用程序的运行效率 尤其是实时操作系统 所以本文针对操作系统来做一些基准测试 看看在低端x
  • RTT-信号量

    RTT 信号量 概念 信号量就是一个标记位 释放信号量就是标记位加一 获取信号量后自动减一 减到0后不能再获取了 信号量 Semaphore 是一种实现线程间通信的机制 实现线程之间同步或临界资源的互斥访问 常用于协助一组相互竞争的线程来访
  • RT-Thread内核启动流程

    一般了解一份代码大多从启动部分开始 同样这里也采用这种方式 先寻找启动的源头 RT Thread 支持多种平台和多种编译器 而 rtthread startup 函数是 RT Thread 规定的统一启动入口 一般执行顺序是 系统先从启动文
  • 配置 RT-Thread 的工程目录

    1 前言 RT Thread 基于 Scons 的包管理非常方便让我们使用 RT Thread 进行开发 但在实际工程中将应用代码写到 RT Thread 官方提供的 bsp 目录下面会非常不便于使用 无法使用自己 git 工具进行代码管理
  • RT-Thread记录(五、RT-Thread 临界区保护与FreeRTOS的比较)

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

    需要提前了解的知识点 AbstractQueuedSynchronizer 实现原理 类介绍 Semaphore 信号量 是用来控制同时访问特定资源的线程数量 它通过协调各个线程 以保证合理的使用公共资源 比如控制用户的访问量 同一时刻只允
  • 自己动手写RTOS:02-在M3内核上实现pendsvc

    自己动手写RTOS 自己动手写RTOS 01基础知识和理论部分 自己动手写RTOS 02 在M3内核上实现pendsvc 文章目录 自己动手写RTOS 一 M3内核的相关知识 1 1寄存器 1 2特殊寄存器 1 3堆栈 二 pendSVC实
  • RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main

    Keil的两个符号 Sub 与 Super 是其做的打 补丁 功能 具体调用方法就是程序中包含有main函数 和 Sub main Super main 两个符号 源码先放出来 re define main function int Sub
  • uCOSii中的互斥信号量

    uCOSii中的互斥信号量 一 互斥型信号量项管理 MUTUAL EXCLUSION SEMAPHORE MANAGEMENT OSMutexAccept 无条件等待地获取互斥型信号量 OSMutexCreate 建立并初始化一个互斥型信号
  • RT-Thread记录(七、IPC机制之邮箱、消息队列)

    讲完了线程同步的机制 我们要开始线程通讯的学习 线程通讯中的邮箱消息队列也属于 RT Thread 的IPC机制 目录 前言 一 邮箱 1 1 邮箱控制块 1 2 邮箱操作 1 2 1 创建和删除 1 2 2 初始化和脱离 1 2 3 发送
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • 操作系统内部机制学习

    切换线程时需要保存什么 函数需要保存吗 函数在Flash上 不会被破坏 无需保存 函数执行到了哪里 需要保存吗 需要保存 全局变量需要保存吗 全局变量在内存上 无需保存 局部变量需要保存吗 局部变量在栈里 也是在内存里 只要避免栈不会被破坏
  • 中断管理学习

    中断管理 什么是中断 简单的解释就是系统正在处理某一个正常事件 忽然被另一个需要马上处理的紧急事件打断 系统转而处理这个紧急事件 待处理完毕 再恢复运行刚才被打断的事件 生活中 我们经常会遇到这样的场景 当你正在专心看书的时候 忽然来了一个
  • RT-Thread 内核基础(五)

    使用static修饰全局变量作用 限制作用域 如果全局变量前面加上 static 关键字 那么该变量的作用域将被限制在声明它的源文件中 即它将成为一个文件作用域的静态变量 其它源文件无法访问这个变量 这对于控制变量的可见性和避免命名冲突是有
  • Micriμm μC/OS-III RTOS 中的分配和释放

    我们使用 Micrium 的 C OS III RTOS 和 Renesas 的 RX62N 我们构建了一个必须动态分配和释放数据的系统 我们发现了功能malloc and free 与 RTOS 配合得不好 然而 RTOS 为此提供了一个

随机推荐

  • 钢铁缺陷检测挑战赛 11月第5名方案

    文章目录 零 写在最前 一 安装PaddleDetection 二 数据预处理 三 训练 四 评估模型 五 预测 六 生成比赛结果 7 总结 零 写在最前 该项目源于 飞桨学习赛 钢铁缺陷检测挑战赛 基于飞桨目标检测开发套件PaddleDe
  • Dubbo的使用及原理

    Dubbo是什么 Dubbo是阿里巴巴SOA服务化治理方案的核心框架 每天为2 000 个服务提供3 000 000 000 次访问量支持 并被广泛应用于阿里巴巴集团的各成员站点 Dubbo 是一个 分布式服务框架 致力于提供 高性能和透明
  • 基于NAudio实现录制声卡声音

    之前的文章 测试 net开源音频库NAudio 中介绍了基于NAudio模块中的WaveInEvent和WaveFileWriter类实现基本的录音功能 但存在一个问题 本来想录制视频中的声音 但录音过程中会把麦克风中的杂音 挪动物品的声音
  • Vue.js入门——指令大全

    什么是指令 Vue的指令是带有特殊前缀v 的HTML特性 他可以绑定一个表达式 并且把一些特性作用到DOM结构上去 下面我们来看一下常见的指令 1 v text v text指令用于将数据填充到标签中 作用于插值表达式类似 如果数据中有HT
  • 从关系型数据库到非关系型数据库

    原文地址 http blog csdn net robinjwong article details 18502195 1 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 关系模型是在1970年由IBM的研究员E F Co
  • Opencv之cv2.minAreaRect

    目录 一 cv2 minAreaRect函数原型 二 minAreaRect函数返回rect对象 一 cv2 minAreaRect函数原型 cv2 minAreaRect Points 其中points是点集 数据类型为ndarray a
  • 怀旧服服务器荣誉系统是啥,怀旧服荣誉系统上线第一天:互刷出现 第一批R10指日可待?...

    千呼万唤 国服怀旧服P2阶段终于开放了 荣誉系统 世界BOSS全都在11月15日凌晨更新完成后加入到了游戏当中 怀旧服玩家也是早早地准备了起来 从凌晨更新完成的那一刻开始 国服各大服务器就进入到了激烈的世界PVP当中 之前还一片祥和的野外瞬
  • 定时器中断实验

    目录 一 什么是TIM 1 TIM定义 2 定时器分类 二 定时器中断的配置 1 定时器中断的配置流程 2 根据例程来看 三 TIM库函数介绍 四 跨文件使用变量的方法 五 关于定时器中断实验的一个问题 一 什么是TIM 1 TIM定义 T
  • oracle 管理之《sql命令》

    数据库其实就是柜子 柜中的抽屉是表空间 抽屉中的文件夹是数据文件 文件夹中的纸是表 写在纸上的信息就是数据 一 表空间管理 1 创建表空间 create tablespace ams datafile e app oracle oradat
  • 数据结构之美:如何优化内存和性能

    文章目录 什么是数据结构 内存优化 使用紧凑的数据类型 避免冗余存储 使用位运算 压缩数据 性能优化 使用适当的数据结构 减少不必要的复制 使用合适的算法 数据结构优化的案例分析 结论 欢迎来到数据结构学习专栏 探索数据结构之美 如何优化内
  • 立创梁山派GD32F450ZGT6--使用DMA实现多通道ADC采集

    这次调试有些久 缺乏的知识很多 最重要的是ADC的引脚配置为浮空之后 如果没有接入东西 其读取的ADC值是不确定的 所以在测试的时候 一定要把对应的电压接入ADC引脚 测量的值才是准确的 上代码 adc c include adc h 采样
  • 解决 PowerDesigner 错误 The generation has been cancelled…

    在生成为物理数据模型时出现错误 Thegeneration has been cancelled because errors have been found by the checkmodel 其实也是设置问题 点击PowerDesign
  • python怎么连续计算各个坐标之间距离_使用dlib,OpenCV和Python进行人脸识别—人眼瞌睡识别...

    使用dlib OpenCV和Python进行人脸识别 人眼瞌睡识别 前期文章我们分享了如何使用python与dlib来进行人脸识别 以及来进行人脸部分的识别 如下图 dlib人脸数据把人脸分成了68个数据点 从图片可以看出 人脸识别主要是识
  • c语言字母分别代表的意思,C语言中%c,%s分别代表什么意思? 在C语言中c% 和 d% 是表示什么意思?...

    c在C语言中代表字符型格式符 s在C语言中代表字符串型格式符 c和 s一般用在printf sprintf等字符串格式化函数中 用于决定格式化参数的数据类型 如printf s a 会将变量a作为字符串类型进行格式化 printf 函数是格
  • HTML5 Canvas爱心表白动画特效

    代码自用自取 复制粘贴直接使用 喜欢的话可以查看博主其它文章 贡献一丢丢的浏览量 感激不尽 先看一下效果 div div
  • Gateway网关简介以及使用

    目录 一 概述简介 1 1 Gateway是什么 1 2 Gateway能干嘛 1 3 Zuul和gateway 1 4 gateway三大核心概念 1 5 gateway工作流程 二 实战练习 2 1 入门demo 2 2 网关路由两种配
  • js 金额格式化,千分位以逗号隔开

    desc 向金额添加逗号分隔符 func addComma static param Number money 传入的金额 param Number wei 保留几位小数 默认两位 returns string 转换后的金额字符串 exam
  • qt退出定位

    https blog csdn net u011430225 article details 52812854
  • 三、教你搞懂渐变堆叠面积图《手把手教你 ECharts 数据可视化详解》

    注 本系列教程需要对应 JavaScript html css 基础 否则将会导致阅读时困难 本教程将会从 ECharts 的官方示例出发 详解每一个示例实现 从中学习 ECharts ECharts 官方示例 https echarts
  • RTT-信号量

    RTT 信号量 概念 信号量就是一个标记位 释放信号量就是标记位加一 获取信号量后自动减一 减到0后不能再获取了 信号量 Semaphore 是一种实现线程间通信的机制 实现线程之间同步或临界资源的互斥访问 常用于协助一组相互竞争的线程来访