FreeRTOS - 计数信号量

news/2024/4/27 15:00:27/文章来源:https://blog.csdn.net/m0_51388102/article/details/130323723

一.任务功能

1、修改按键功能,模拟停车位出入功能

2、当按键按下 获取车位

3、当按键抬起 释放车位

二.API接口

函数原型

SemaphoreHandle_t xSemaphoreCreateCounting( ①UBaseType_t uxMaxCount,

②UBaseType_t uxInitialCount );

功能概述

创建计数信号量,并返回信号量句柄。

参数

①:计数信号量最大值,当信号量到达最大值后,就不能是give

②:创建时,计数信号量初始值

返回值

NULL:堆空间不足

Any other value :信号量句柄

注意事项

configSUPPORT_DYNAMIC_ALLOCATION必须置为1

USE_COUNTING_SEMAPHORES必须置为1

函数原型

#include “FreeRTOS.h”

#include “semphr.h”

UBaseType_t uxSemaphoreGetCount( ①SemaphoreHandle_t xSemaphore );

功能概述

返回当前信号量计数值

参数

①:信号量句柄

返回值

当前信号量计数值

注意事项

None

三.业务流程

三.CubeMX配置

  • 使能计数量

  • 创建信号量

四.代码配置

  • GPIO.c

extern osSemaphoreId KeyCountingSemHandle;
//按键检测回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(Key1_Pin == GPIO_Pin)                                                 //判断按下的GPIO{if ( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET)              //按下按键,导通{//            HAL_Delay(10);                                                  //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_RESET){
//                 HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_RESET);
//                 HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_SET);/*建立标志位*/keyStatus = Key_down;printf("按键已按下\r\n");if(xSemaphoreTakeFromISR(KeyCountingSemHandle,NULL) == pdPASS){printf("获取车位成功\r\n");}else{printf("获取车位失败,车位已满\r\n");}}}else{if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET)             // 高电平,未准备好      {   
//                HAL_Delay(10);                                              //软件去抖动  if( HAL_GPIO_ReadPin(GPIOA,GPIO_Pin) == GPIO_PIN_SET){                //                    HAL_GPIO_WritePin(GPIOB,Led_Red_Pin,GPIO_PIN_SET);      //关闭红灯
//                    HAL_GPIO_WritePin(GPIOB,Led_Green_Pin,GPIO_PIN_RESET);  //开启绿灯/*建立标志位*/keyStatus = Key_up;printf("按键已抬起\r\n");if(xSemaphoreGiveFromISR(KeyCountingSemHandle,NULL) == pdPASS){printf("释放车位成功\r\n");}else{printf("释放车位失败,车位为空\r\n");}}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102200.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转ChatGPT:辅助编程

一、写在前面 首先让小Chat介绍自己在编程方面的天赋: 总结起来:TA掌握了海量的编程知识,能做到自动代码生成、代码审查优化、编程教学辅导以及实时问题解答。我问TA学习了多少案例,TA说:忘了,但保证够用。…

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》,不知道大家是否真的理解这个传说中的神(反正俺是没有~) 这两天我又看了一些视频讲解,感谢各位大佬的解读,让我通透了不少。 这篇文章就和…

语音交友app开发中的用户积分系统

引言 在当今数字时代,语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台,在这里他们可以结交新朋友,分享他们的生活和信仰,并建立深厚的人际关系。然而,市场上存在大量的语音交友app,这使得…

深度学习--基础(一)pytorch安装--cpu

在线安装 无GPU的时候,只能安装CPU版本,打开官网 https://pytorch.org/ 直接Pip安装即可 国内访问这些下载安装会出现超时的情况,可以-i指定国内安装源: pip3.11 install torch torchvision torchaudio -i https://pypi.tuna.ts…

java版本电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明&#xff0…

信息安全复习四:置换密码乘积密码隐写术

一、章节梗概 置换密码、Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 二、置换技术 2.1 定义 重新排列明文字母,达到信息加密的目的。 与替代密码不同的是,原来明文中的字母同样出现在密文中,只是顺序被打断。 古典的置换密码…

当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升

作者:当贝技术团队 随着业务飞速发展,当贝的传统 IT 资产也渐显臃肿,为了避免制约发展的瓶颈,痛定思痛,技术团队果断变革:核心业务云原生化之后,运维效率、整体稳定性和研发效率均得到了全面提…

【SVN】window SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

中台产品经理02:产品经理如何用一套方法搞定复杂业务拆解?

如果你问我作为企业级应用的产品经理日常工作最大的感受是什么?那就是经常会需要面对众多复杂类业务需求。 原因其实很好理解,B端产品通常需要支持更复杂的业务流程,需求也更加个性化和细分。例如,银行业务系统、医院管理系统、物…

CDR2023新版本安装下载教程

CDR2023是最新发布的一款强大且专业的图像设计软件,适用于平面设计、装饰设计、产品包装设计等领域。coco玛奇朵其主要功能如下: 1. 矢量图形设计:提供强大的绘图与编辑工具,支持创建和编辑各种矢量图形,如线条、曲线、矩形、椭圆、星形等。 2. 文字编辑:提供文字输入、编辑与…

C++类与对象—上

本期我们来学习类与对象 目录 面向过程和面向对象初步认识 类的引入 访问限定符 类的定义 封装 类的作用域 类的实例化 this指针 C语言和C实现Stack的对比 面向过程和面向对象初步认识 C 语言是 面向过程 的, 关注 的是 过程 ,分析出求解问题的…

buuctf -2

目录 你竟然赶我走 大白 N种方法解决 [ACTF2020 新生赛]Include 1 php://filter的一些学习 [ACTF2020 新生赛]Exec [强网杯 2019]随便注 你竟然赶我走 1.下载文件,得到一张图片 2.放进010分析,在文件尾得到flag 大白 1.根据题目提示&#xff0…

Pyqt应用相关之与Excel的联接

利用所学相关Pyqt实现对于Excel文件内部数据的处理,首先需要获取Excel的数据,在获取后进行保存处理即可完成相应的操作。 def save_data_btn_click(self):dir self.save_dir_text.text().strip()self.data_frame_group.to_excel(dir output.xlsx,sheet…

HCIP之链路聚合、VRRP

链路聚合 链路聚合 --- 可以将多个物理接口绑定成一个逻辑接口,即将N条物理链路聚合为一条逻辑链路。可以在不升级硬件的条件下,达到增加带宽的效果 我们将逻辑链路,称为聚合链路,在华为设备中称为ETH-TRUNK链路(这个技…

物联网产品的开发的难点,致命点是什么?

物联网产品的开发的难点,致命点是什么? 当下是万物互联的时代, 物联网产品本身的难度因行业而异。但是物联网设备上云通信交互就成了各个行业需要首先解决的问题。 物联网通信问题从产品设计一开始,如果不能很好的解决&#xff0c…

马云上三路和下三路

马云的上三路、下三路,马云最牛搭档总结 马云刚最牛搭档:蔡崇信,关明生 《关乎天下》是关明生写的一本书 趣讲大白话:没有方法走不远 【趣讲信息科技143期】 **************************** 马云上三路:使命&#xff0c…

你掌握了stream流的全部新特性吗?

我们知道很早之前java8对于之前的版本更新了许多 新的支持,比如lamda函数式接口的支持,支持更多函数式接口的使用,对链表,数组,队列,集合等实现了Collectio接口的数据结构提供了StreamSupport.stream()支持…

基于ubuntu18.04.6 LTS服务器安装nvidia驱动

1对于一个刚刚配置的服务器,首先nvidia-smi,自然无法显示Driver Version、最高cuda版本等信息。 nvidia-smi: command not found 需要我们自己安装nvidia驱动 2禁用老驱动 禁用自带nouveau驱动 sudo vim /etc/modprobe.d/blacklist.conf 打开后在CONF文…

2023年软件测试的前景?测试工程师技能提升,进阶自动化测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 2023年软件测试行…

【开发日志】2023.04 ZENO----Composite----CompNormalMap

CompNormalMap 将灰度图像转换为法线贴图 将灰度图像转换为法线贴图是一种常见的技术,用于在实时图形渲染中增加表面细节。下面是一个简单的方法来将灰度图像转换为法线贴图: 加载灰度图像,并将其转换为浮点数值范围[0, 1]。 对于每个像素…