STM32 HAL freertos零基础(四) 二值信号量

news2024/9/24 3:27:06

1、二值信号量

FreeRTOS中的二值信号量是一种用于任务间同步的机制,它只能有两个状态:0 或 1。二值信号量通常用来表示某个事件是否发生,比如硬件中断发生时设置信号量为1,表示事件已发生;而任务在需要等待该事件发生时,会尝试获取信号量,若信号量为0则任务会被挂起等待,直到信号量变为1。二值信号量本质就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,用它来进行互斥访问或任务同步。

2、主要PAI函数

xSemaphoreCreateBinary() //使用动态方式创建二值信号量
 xSemaphoreCreateBinaryStatic() //使用静态方式创建二值信号量
xSemaphoreGive() //释放信号量
 xSemaphoreGiveFromISR() //在中断中释放信号量
xSemaphoreTake() //获取信号量
xSemaphoreTakeFromISR() //在中断中获取信号量

 2.1 二值信号量创建

SemaphoreHandle_t xSemaphoreCreateBinary( void )
/*
参数:
无
返回值:
成功,返回对应二值信号量的句柄;
失败,返回 NULL 。
*/

2.2 二值信号量释放

BaseType_t   xSemaphoreGive( SemaphoreHandle_t xSemaphore )
/*
参数:
xSemaphore:要释放的信号量句柄
返回值:
成功,返回 pdPASS ;
失败,返回 errQUEUE_FULL 。
*/

2.3 获取二值信号量

BaseType_t   xSemaphoreTake( SemaphoreHandle_t xSemaphore,
 TickType_t xTicksToWait );
/*
参数:
xSemaphore:要获取的信号量句柄
xTicksToWait:超时时间,0 表示不超时,portMAX_DELAY表示卡死等待;
返回值:
成功,返回 pdPASS ;
失败,返回 errQUEUE_FULL 。
*/

3、STM32CubeMX配置

Timers and Semaphores -> Add -> ok

生成代码。

4、keil 5程序设计 

4.1 程序初始化配置

首先在main.h中添加信号量头文件:

#include "semphr.h"

接着在freertos中对任务1、2进行信号量放入、获取函数:

4.2 任务1 信号量放入

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
   uint16_t buf = 100;
   BaseType_t status;
  /* Infinite loop */
  for(;;)
  {
	  if(sign_1==1){
		  status = xSemaphoreGive(myBinarySem01Handle);
		  if (status == pdTRUE){
			 printf("二值信号量放入成功");
		  }
		  else{
			 printf("二值信号量放入失败\r\n");
		  }
	      sign_1=0;
	  }
    osDelay(1);
  }
  /* USER CODE END StartDefaultTask */
}

4.3 信号量获取

void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
	uint16_t buf;
    BaseType_t status;
  /* Infinite loop */
  for(;;)
  {
	  if(sign_1==2){
		  status = xSemaphoreTake(myBinarySem01Handle,0);
		  if (status == pdTRUE){
			 printf("二值信号量获取成功");
		  }
		  else{
			 printf("二值信号量获取失败\r\n");
		  }
	      sign_1=0;
	  }
    osDelay(1);
  }
  /* USER CODE END StartTask02 */
}

4.4 测试

测试会发现信号量放入失败,但是获取成功。

解决办法:

造成上诉问题是因为STM32CubeMX默认已经放入一个信号量,只需要将1改成0即可。

myBinarySem01Handle = osSemaphoreNew(1, 0, &myBinarySem01_attributes);

测试结果:

 问题解决!

上文如有错误恳请各位大佬指正!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter Notebook远程登录配置

目录 一、之前的版本修改方法 1、生成配置文件 2、设置密码、获取秘钥 3、修改默认配置文件 注:自动化脚本 二、新版本 注:自动化脚本 三、访问 四、ip查询 1、win 2、linux 一、之前的版本修改方法 1、生成配置文件 jupyter notebook --ge…

选对crm管理系统软件,客户留存率提升70%不是梦!

本文将盘点10款行业领先的crm管理系统软件,为企业选型提供参考! CRM系统,全称Customer Relationship Management System,即客户关系管理系统,是企业用来管理和分析客户互动与数据的软件系统。CRM系统的核心在于“以客户…

idea 拉取项目需要log in to git地址

idea 拉取项目需要log in to git地址 一. 问题复现二. 解决办法 一. 问题复现 1.使用 idea 拉取 git 代码 2.弹出“log in to XXXX 二. 解决办法

JavaWeb案例-登录认证

在前面的文章中,我们复习了部门管理、员工管理的基本功能。但是我们并没有登录,就直接访问到了Tilias智能辅助系统的后台。这是不安全的,所以今天复习登录认证。最终实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。…

Java版本管理工具Jabba安装教程(Windows)

Java版本管理工具Jabba安装教程(Windows) 前言 Java版本的管理工具有很多,诸如Jenv,Jabba等,考虑到我之前使用Node.js的nvm还比较顺手,Jabba是受Node.js的nvm启发而来,故选择Jabba作为版本管理工具 这里…

iPhone照片删不掉?原因探索及解决方案

对于许多iPhone用户来说,删除不再需要的照片似乎是一个简单的任务。然而,有时你可能会发现某些照片无论如何都删不掉。这不仅令人困惑,还可能导致不必要的存储空间浪费。本文将探索导致iPhone照片删不掉的几种常见原因,并提供有效…

sdk和API接口的区别

目录 ✔️SDK(Software Development Kit)特点 ✔️API接口(Application Programming Interface)特点 ✔️区别总结✔️结合使用 ✔️SDK(Software Development Kit) SDK 是一组工具、库、文档和示例代码的集…

笔记本电脑桌面删除文件怎么恢复?恢复步骤全解析

在快节奏的现代生活中,笔记本电脑已成为我们不可或缺的伴侣。桌面作为电脑使用的起点,经常堆满了各种文件和快捷方式。 然而,由于操作失误或其他原因,我们有时会误删桌面上的重要文件,这无疑会给我们带来极大的困扰。…

SSM框架整合实战

本笔记基于【尚硅谷新版SSM框架全套视频教程,Spring6SpringBoot3最新SSM企业级开发】https://www.bilibili.com/video/BV1AP411s7D7?vd_sourcea91dafe0f846ad7bd19625e392cf76d8 总结 资料获取网址:https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF 框架…

CTF——简单的《WEB》

文章目录 一、WEB1、easysql2、baby_web3、baby_sql4、upload_easy5、easygame拓展1.1拓展1.2 6、ht_ssti7、包容乃大 一、WEB 1、easysql 题目描述: sql注入漏洞 1.常用的sql注入测试语句 2.sql注入bypass 解题思路 这边提示基本给的也很完整的,不…

野生动物检测-目标检测数据集(包括VOC格式、YOLO格式)

野生动物检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1RHpKHAyRyl0FDD4Up3MOmQ?pwdrbjq 提取码:rbjq数据集信息介绍: 共有 1504 张图像和一一对应的标注文件 标…

配置CMake

如题,需要下载CMake并配置。 CMake官网网址:CMake - Upgrade Your Software Build System 点击网页上“Download”,选择所需版本下载。 按下图配置环境变量 在cmd中输入“cmake”,如果配置正确,则会显示类似信息。

零工市场小程序:找临时工的新利器

找工作的方式正在不断进化,对于寻找临时工作者来说,一个新的工具已经出现在市场上,并迅速成为找工作的新宠——零工市场小程序。那么零工市场小程序如何成为寻找临时工作的新利器? 一、零工市场小程序概述 零工市场小程序是一种基于微信等平…

综合网络实验(H3C)可当毕业设计

介绍:本次实验通过多种路由交换协议组网来模拟中大型网络公司的网络组网转发,因本次实验中所涉及的设备数量较多,内存不足的朋友可以通过分批次启动部分设备来查看实验效果,如果想要启动全部设备的话,大概需要20G的运行…

ORA-12514

第一步,去这个地址,查查你的服务名是否存在 第二步,没查到就是你服务名写错了,查到了就退出我的解答

百易云资产管理运营系统 house.save.php SQL注入漏洞

1 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业…

探讨IP查询技术在金融行业的深度应用

随着互联网技术的飞速发展,金融行业对信息技术的依赖程度日益加深。其中,IP查询技术作为网络安全与风控的重要工具,在金融行业中的应用日益广泛且深入。本文将从多个角度探讨IP查询技术在金融行业间的应用及其重要性。 一、网络安全与监管 在…

keithley 2430 数字源表

Keithley 2430脉冲源表,100V,10A,1kW Keithley 2430 SourceMeter 的功能和规格包括: 数字 I/O 接口: 紧密的系统集成,适用于装箱和分类等应用 内置组件处理程序接口 测试开始和测试结束信号 5V、300mA电…

Blocked mirror for repositories OR java:找不到符号

## 问题一:Blocked mirror for repositories: [nexus (http://maven.oa.com/nexus/content/groups/public/, default, releasessnapshots)] 网上试了很多方法,最终还是舍弃了高版本的maven,换用3.6.3版本。解决问题。 ## 问题二&#xff1a…

JAVA并发编程AQS原理剖析

很多小朋友面试时候,面试官考察并发编程部分,都会被问:说一下AQS原理。面对并发编程基础和面试经验,专栏采用通俗简洁无废话无八股文方式,已陆续梳理分享了《一文看懂全部锁机制》、《JUC包之CAS原理》、《volatile核心…