STM32F407ZGT6-HAL-FreeRTOS-信号量示例

本程序创建了一个二进制信号量,然后创建2个任务:一个用于释放信号量,另一个用于获取信号 量;

发送任务、接收任务的代码和执行流程如下:

A:发送任务优先级高,先执行。连续3次释放二进制信号量,只有第1次成功
B:发送任务进入阻塞态
C:接收任务得以执行,得到信号量,打印OK;再次去获得信号量时,进入阻塞状态 在发送任务        的vTaskDelay退出之前,运行的是空闲任务:现在发送任务、接收任务都阻塞了
D:发送任务再次运行,连续3次释放二进制信号量,只有第1次成功
E:发送任务进入阻塞态
F:接收任务被唤醒,得到信号量,打印OK;再次去获得信号量时,进入阻塞状态 

即使发送任务连续释放多个信号量,也只能成功1次。释放、获得信号量是一一对应的。

 一、HAL库基础环境配置

 HAL库三板斧

1、配置下载线

  2、配置晶振

 

 3、配置时钟 

二、配置外设-串口1

 

三、在CubeMX中添加FreeFTOS

注意:修改时基【由于使用了FreeRTOS系统,需要将时基修改为基本时钟,如TIM6】 

 

四、配置FreeRTOS参数

创建了一个二进制信号量,然后创建2个任务:一个用于释放信号量,另一个用于获取信号量;

1、任务创建:

2、二进制信号量创建

五、编写任务代码

 发送任务:

/* USER CODE END Header_Sender */
void Sender(void *argument)
{/* USER CODE BEGIN Sender *//* Infinite loop */int i;int cnt_ok = 0;int cnt_err = 0;const TickType_t xTicksToWait = pdMS_TO_TICKS(10UL);for(;;){for(i = 0;i<3;i++){if(xSemaphoreGive(myBinarySem01Handle) == pdTRUE){printf("Give BinarySemaphore %d TimeOut_t:OK\r\n",cnt_ok++);}else{printf("Give BinarySemaphore %d TimeOut_t:ERR\r\n",cnt_ok++);}}vTaskDelay(xTicksToWait);}/* USER CODE END Sender */
}

  接收任务:

/* USER CODE END Header_Receiver */
void Receiver(void *argument)
{/* USER CODE BEGIN Receiver *//* Infinite loop */int cnt_ok = 0;int cnt_err = 0;for(;;){if(xSemaphoreTake(myBinarySem01Handle,portMAX_DELAY) == pdTRUE){printf("Get BinarySemaphore %d TimeOut_t:OK\r\n",cnt_err++);}else{printf("Get BinarySemaphore %d TimeOut_t:ERR\r\n",cnt_err++);}}/* USER CODE END Receiver */
}

程序运行效果:

发送任务、接收任务的代码和执行流程如下:

A:发送任务优先级高,先执行。连续3次释放二进制信号量,只有第1次成功
B:发送任务进入阻塞态
C:接收任务得以执行,得到信号量,打印OK;再次去获得信号量时,进入阻塞状态 在发送任务        的vTaskDelay退出之前,运行的是空闲任务:现在发送任务、接收任务都阻塞了
D:发送任务再次运行,连续3次释放二进制信号量,只有第1次成功
E:发送任务进入阻塞态
F:接收任务被唤醒,得到信号量,打印OK;再次去获得信号量时,进入阻塞状态 

即使发送任务连续释放多个信号量,也只能成功1次。释放、获得信号量是一一对应的。

配套示例源码:链接:https://pan.baidu.com/s/1Vs75_JZgR3nAU9B-FFWBSQ 
提取码:z8pv 

计数型信号量无非就是能设置初始值和上限值,用法和二值信号量一样,看什么场景什么适用,这个和我之前学的互斥量差不太多,也是拿锁和上锁,总的来说都是实现同步的功能,不能实现数据交换。

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

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

相关文章

一文搞懂offset、client、scroll系列及案例

目录 一、offset 1-1、offset系列属性 1-2、offset与style区别 1-3、案例 1-3-1、计算鼠标在盒子内的坐标 1-3-2、拖动模态框 二、client 2-1、client系列属性 三、scroll 3-1、scroll系列属性 3-2、案例 3-2-1、滚动页面一定距离后固定侧边栏 一、offset offset是…

【WRF工具】服务器上使用conda安装NCL

【WRF工具】服务器上使用conda安装NCL NCL概述使用conda下载NCL安装conda安装NCL另&#xff1a;当使用NCL时&#xff0c;则需要激活ncl_stable环境 参考 NCL概述 NCAR Command Language&#xff08;NCL&#xff09; 是由美国大气研究中心&#xff08;NCAR&#xff09;推出的一…

Spring Boot 中实现任务后台处理的几种常见方式

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 在现代应用程序中&#xff0c;后台处理对于处理发送电子邮件、处理文件、生成报告等任务至关重要。 Spring Boot 提供了多种机制来高效地实现后台任务。本文探讨了在 Spring Boot 中处理后台处理的各…

大数据新视界 --大数据大厂之 Vue.js 与大数据可视化:打造惊艳的数据界面

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

java节假日工具类,判断一个日期是否是法定节假日

java节假日工具类&#xff0c;判断一个日期是否是法定节假日 1.HolidayUtil工具类2.工具类生成的日期json文件3.结果展示 无需链接数据库&#xff0c;无需手写节假日集合列表 1.HolidayUtil工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.data…

0-10V 电压转光纤

型号&#xff1a;MS-F155-VM(CE /ISO9001&#xff09; 功能概述 MS-F155-VM是将0-10V电压转为光纤信号的模块&#xff0c;分发送和接收两个设备发送模块将电流或者电压信号转变为光信号&#xff0c;通过光纤传输&#xff0c;接收端将光信号还原为电流或者电压信号。可以延长通信…

2024源代码加密软件分享TOP10丨保护源代码安全很重要!

在如今的数字时代&#xff0c;源代码是企业的核心资产之一。无论是开发软件、应用程序&#xff0c;还是自动化系统&#xff0c;源代码都是技术的根基&#xff0c;决定了公司的核心竞争力。然而&#xff0c;源代码泄露或被盗可能会给企业带来巨大的安全风险和经济损失。因此&…

03-Docker下载加速

03-Docker下载加速 docker下载加速 方式1&#xff1a;使用 网易数帆、阿里云等容器镜像仓库进行下载。 网易数帆官网&#xff1a;https://sf.163.com/ 例如&#xff0c;下载网易数帆镜像中的mysql。&#xff08;网易数帆的地址为 hub.c.163.com&#xff0c;网易数帆对dockerh…

光控资本:沪指涨0.72%,煤炭、银行板块拉升,车路云概念活跃

23日早盘&#xff0c;沪指盘中强势上扬&#xff0c;深证成指亦走高&#xff0c;场内超3100股飘红。 到午间收盘&#xff0c;沪指涨0.72%报2756.39点&#xff0c;深证成指涨0.58%&#xff0c;创业板指微涨0.09%&#xff0c;上证50指数涨0.73%&#xff1b;两市估计成交3657亿元。…

TLV解码 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 TLV编码是按 [Tag Length Value] 格式进行编码的&#xff0c;一段码流中的信元用Tag标识&#xff0c;Tag在码流中唯一不重复&#xff0c;Length表示信元Value的长度&#xff…

不敲一行代码!助你快速搭建属于自己的官网博客!-VitePress保姆级教程

文章目录 前言项目搭建首页修改项目配置 前言 我们在阅读官方文档时&#xff0c;经常看到一些项目的文档非常简约精美&#xff0c;并且布局高度相似&#xff0c;其实这些官网是基于vitepress搭建&#xff0c;例如&#xff1a; Vite官方文档 Vue-Use SnowAdmin 这些官网…

从零到一:如何用Ollama和OpenUI构建强大的AI模型库

搭建开源大模型平台的步骤与模型介绍 在这篇文章中&#xff0c;我将分享如何在Windows上使用Ollama和OpenUI搭建开源大模型平台的步骤&#xff0c;并介绍我所部署的几个模型及其擅长的领域。 目录 搭建开源大模型平台的步骤与模型介绍一、搭建平台步骤1. 安装Ollama2. 安装Ope…

VScode配置连接远程服务器configure ssh Hosts

VScode配置连接远程服务器&#xff0c;具体步骤 一、点击VScode左下脚这两个∟的按钮 二、点击完上面的按钮后&#xff0c;出现如下的下拉选项&#xff0c;选择“Connect to Host” 三、选择“Connect to Host”后&#xff0c;下拉选项会更新&#xff0c;选择“Configure SSH …

影刀RPA实战:java结合影刀同步采购订单数据

1.实战目标 本次实战我们用java语言结合影刀&#xff0c;实现从自用ERP系统同步订单到旺店通中&#xff0c;在工作中&#xff0c;有时候我们的运营数据不是直接在旺店通ERP中操作&#xff0c;比如我们有自己的ERP&#xff0c;完成一些特定的内部工作后&#xff0c;再把数据同步…

18937 阿克曼(Ackmann)函数

### 思路 1. **递归定义**&#xff1a;根据阿克曼函数的定义&#xff0c;使用递归来计算函数值。 2. **递归终止条件**&#xff1a; - 当 m 0 时&#xff0c;返回 n 1&#xfffd;&#xfffd; - 当 m > 0 且 n 0 时&#xff0c;返回 ackermann(m - 1, 1)。 - 当…

QT窗口无法激活弹出问题排查记录

问题背景 问题环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12 碰见了一个问题应用最小化,然后激活程序窗口无法弹出 这里描述一下代码的逻辑,使用QLocalServer实现一个单例进程,具体的功能就是在已存在一个程序A进程时,再启动这个程序A,新的程序A进程会被杀死,然后激活已存…

Python 从入门到实战25(模块)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了类继承的相关知识。今天我们将学习一下模块的…

照片写真记录摄影作品记录网站源码

完美适应iPad&#xff0c;平板&#xff0c;手机竖屏不支持lazy&#xff0c;横屏可以&#xff0c;但建议使用平板查看效果&#xff0c; 有服务器直接上传解压使用&#xff0c;环境nginxphp&#xff0c; 没有服务器也没关系&#xff0c;可以直接使用html

模组差分包,可能是你远程升级失败的罪魁祸首!

也许我们已经习惯生活里的问题接连不断。。。但当收到客户的问题反馈&#xff0c;还是会心头一紧&#xff01; 最近有客户反馈在乡村里频繁出现掉线的情况。 我们赶紧排查&#xff1a;换货、换SIM卡&#xff0c;发现只有去年5月22号采购的那批模块在客户环境附近会出现掉线的…

开放式蓝牙耳机哪个品牌好用?行业顶尖五款开放式耳机别错过!

开放式蓝牙耳机哪个品牌好用&#xff1f;行业顶尖五款开放式耳机别错过&#xff01; 随着开放式耳机的流行&#xff0c;越来越多的用户开始青睐这种类型的耳机。尽管有些网友将开放式耳机称为“智商税”&#xff0c;但我相信&#xff0c;对于真正体验过的人来说&#xff0c;它…