STM32 HAL freertos零基础(五) STM32CubeMX配置完成后自定义二值信号量 解决二值信号量初始值为1问题

news2024/9/21 21:57:57

1、简介

通过上文虽然实现了二值信号量实战,但每次配置STM32CubeMX二值信号量都恢复默认值1,为了解决该问题,对于二值信号量通过CubeMX配置完成后,在程序内自定义二值信号量。

2、文件建立

建立BinarySem文件夹添加BinarySem.cpp、BinarySem.h文件过程同STM32 HAL freertos零基础(二)-通过STM32CubeMX配置Freertos后在程序中进行任务创建,便于任务管理与识别。

一致。

2.1 BinarySem.cpp

/**
  ******************************************************************************
  * File Name          : BinarySem.cpp
  * Description        : BinarySem
  ******************************************************************************
  * @attention
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "BinarySem.h"
osSemaphoreId_t xMyBinarySemaphore = NULL;
/* Functions -----------------------------------------------------------------*/
/** 
  * @brief 	BinarySem初始化
  * @retval None
  */
void BinarySem_Init(void){
  const osSemaphoreAttr_t myBinarySem02_attributes = {"myBinarySem02"};
  xMyBinarySemaphore = osSemaphoreNew(1, 0, &myBinarySem02_attributes);
}


/**********************************END OF FILE*********************************/

 每次建立新信号量仅仅需要在对应位置进行修改即可:

2.2 BinarySem.h 

/**
  ******************************************************************************
  * File Name          : MainThread.h
  * Description        : 
  ******************************************************************************
  * @attention
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BinarySem_H
#define __BinarySem_H
#ifdef __cplusplus
 extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "main.h"
	 
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "task.h"	
	 
void BinarySem_Init(void);
extern osSemaphoreId_t xMyBinarySemaphore ;
#ifdef __cplusplus
}
#endif
#endif

/**
  * @}
  */

/**
  * @}
  */

/**********************************END OF FILE***********************************/

 2.3 初始化配置

main.h中添加头文件:

#include "BinarySem.h"

接着在mian.c进行初始化:

 BinarySem_Init();

 2.4 测试

最后将任务1、2信号量句柄进行替换:

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

 测试如下:

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

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

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

相关文章

Selenium自动化测试网页加载太慢如何解决(超详细)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 遇到网页加载慢,selenium运行效率降低,可以通过修改页面加载策略提升自动化效率。 selenium加载很慢 通过URL导航到新页面时,…

利用平板电脑和谷歌浏览器进行在线教育学习

在数字化时代,教育的形式越来越多样化,特别是在线教育的兴起为学习带来了前所未有的便利。对于经常在平板电脑上进行学习的用户来说,谷歌浏览器提供了强大的功能,帮助用户更有效地学习。本文将指导您如何在使用平板电脑和谷歌浏览…

系统工程建模MBSE

################################# ############# 片段一 ############## ################################# 下图采用“V”模式显示了集成的基于模型的系统/嵌入式软件开发流程Harmony。左侧描述了自顶向下的设计流程,而右侧显示了自底而上的从单元测试到最终系统验收测试…

‌语音控制小夜灯的实现方案介绍

‌语音控制小夜灯的实现方案组成部分‌ 语音控制小夜灯的实现方案主要包括硬件组装和软件编程两个部分。‌ ‌硬件组装‌涉及将语音声控模块、灯泡、USB连接线等组件正确连接。首先,使用螺丝刀和螺丝将四个隔离柱固定在底板四个拐角处,同时将语音声控模…

Linux CentOS更换阿里云源解决Could not retrieve mirrorlist http://mirrorlist.centos.org

Linux CentOS7 更新yum 操作的时候出现这个问题: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org 然后我执行 grep -nr "mirrorlist.centos.org" /etc/yum.repos.d/* 出现 这个问题时可以…

2023下半年软考网络规划

【考情分析】2023下半年软考网络规划设计师机考考情分析-真题解析公开课视频!_哔哩哔哩_bilibili2023年11月软考网络规划设计师案例分析解析与考后复盘_哔哩哔哩_bilibili全网首发!2023年下半年软考【高级】网规真题试卷--案例分析(部分回忆版…

如何优化谷歌排名更有效?

要想提高排名,首先得从用户的角度出发。要想他们在搜索时最关心什么问题,急需解决哪些痛点,之后要做的就是创建GHA高质量内容,创建内容时尽量深入探讨这些问题,而不是泛泛而谈。内容要自然,尽量避免过多的关…

北京等你!网易云信参加第五届中国银行数智峰会

随着数字中国建设的持续深入,以及大数据、云计算、AI、融合通信等技术在银行业务场景中的应用,银行业正在经历新一轮的数智化转型与革新。 数字化转型不仅是技术层面的升级,更是业务模式和运营方式的全面革新。比如智能虚拟客服、数字银行等的…

软件测试学习笔记丨Postman实战练习

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档:http://petstore.swagger.io ,这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

更改flutter 应用的应用名称和图标

在 Flutter 项目中,更改构建后的应用名称和图标是常见的定制化需求。以下是如何更改应用名称和图标的步骤。 1. 更改应用名称 Android 平台 修改 Android 端的应用名称: Flutter 项目的 Android 部分位于 android/app/src/main/AndroidManifest.xml …

高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验

不管是菜鸟还是老鸟,游戏玩到某个阶段很容易出现瓶颈,在游戏的某个阶段,这里面制约最大的除了操作之外,实际上还是我们用的硬件。比如在PC游戏中,鼠标的影响就非常大,像是在游戏中如果鼠标延迟过高&#xf…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

责任链模式chain of responsibility

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/chain-of-responsibility 将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者 把责任链造出来然后往后传

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化,用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia(AI)进行翻译…

Java中的类加载与卸载机制详解

在Java虚拟机(JVM)中,类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理,还可以帮助开发者优化程序性能,特别是在内存管理和应用程序生命周期管理中起到关键作用…

通信过程天线的原理

文章目录 电场电场的作用 磁场电磁波电磁波怎么表示0与1 引用文章 电场 电场是电荷及变化磁场周围空间里存在的一种特殊物质。 静止电荷在其周围空间产生的电场,称为静电场; 电场的作用 电荷产生电场:任何电荷周围都存在电场。正电荷产生的…

C语言深入了解指针一(14)

文章目录 前言一、内存和地址内存究竟该如何理解编址 二、指针变量和地址取地址操作符&解引用操作符*指针变量的大小 总结 前言 终于来到指针啦!如前篇末尾总结所说,这是你们马上要下大功夫的地方   但是,就像我们上初中的时候&#xf…

Netty权威指南:Netty总结-客户端创建

第十四章 客户端创建 14.1 Netty客户端创建流程分析 BootStrap是socket客户端创建工具类,通过Bootstrap可以方便地创建Netty客户端发起异步TCP连接操作 14.1.1 客户端创建时序图 14.1.2 客户端流程分析 用户线程创建BootStrap实例,通过API设置创建客…

Linux 网络基础概念

文章目录 一、初始协议1、理解2、协议分层3、软件分层4、OSI七层模型5、TCP/IP五层模型 二、再识协议1、为什么要有TCP/IP协议2、什么是TCP/IP协议3、TCP/IP协议与操作系统的关系(宏观上,怎么实现的) 三、网络传输基本流程1、mac地址2、TCP/I…