FressRTOS_day4:2024/4/4

news2024/10/10 4:27:19

1.总结二进制信号量和计数型信号量的区别,以及他们的使用场景。

二进制信号量的数值只有0和1。(用于共享资源的访问);而计数型信号量的值一般是大于或者等于2(用于生产者和消费者模型)


2.使用计数型信号量完成生产者和消费者模型实验。

代码:

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
	for(;;)
	{
		osSemaphoreAcquire(myCountingSem01Handle,osWaitForever);//获取生产者信号量
		printf("我生产了一辆特斯拉\r\n");
		
		osDelay(500);
	}
  /* USER CODE END StartDefaultTask */
}

/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */

  for(;;)
  {
		osSemaphoreRelease(myCountingSem01Handle);//释放生产者任务信号量
		printf("我买了一辆特斯拉\r\n");
    osDelay(500);
  }
  /* USER CODE END StartTask02 */
}

效果图:


3.总结FreeRTOS中同步和互斥的五种方法的使用方法

1.队列:先创建,创建队列有两种方式分别是动态创建和静态创建,动态创建使用xQueueCreate函数进行创建,静态创建使用xQueueCreateStatic函数进行创建。
队列创建成功后,可以开始往队列中写入和读取数据
写函数:
队列写操作也分为两种:分别是在中断中使用的一个函数:xQueueSendToBackFromISR,另一个是在任务中使用的:xQueueSendToBack。

读函数:
读函数也分为两种一种是在中断中进行队列的读取(xQueueReceiveFromISR),一种是在任务中进行队列的读取。(xQueueReceive)

2.信号量:在FreeRTOS中有两种信号量:二进制信号量、计数型信号量。

使用 osSemaphoreNew 函数创建信号量,使用 osSemaphoreAcquire 函数获取信号量,获取信号量后就可以访问共享资源,访问结束后,使用 osSemaphoreRelease 函数释放信号量,以便于其他任务访问共享资源。

3.互斥量:

创建互斥量:osMutexNew

获取互斥量函数:osMutexAcquire

释放互斥量函数:osMutexRelease

4.事件组:

在FreeRTOS中,事件组允许任务等待多个事件的状态,并且可以在任何事件被设置时唤醒等待的任务。

创建事件组函数:osEventFlagsNew

设置事件组函数:osEventFlagsSet

等待事件组函数:osEventFlagsWait

5.任务通知:

任务通知函数:osThreadFlagsSet

等待任务通知函数:osThreadFlagsWait


4.总结任务通知和其他任务通信机制的区别

1.队列、信号量、互斥量、事件组在使用之前都需要先创建,才能使用。任务通知无需创建即可使用。
2.队列、信号量、互斥量、事件组  是多对多通信。任务通知是多对一通信。(只需要知道要通知的任务ID即可)
3.队列、信号量、互斥量、事件组需要被创建,所以消耗的资源也是比较多。任务通知不需要被创建消耗的资源少。

思维导图

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

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

相关文章

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境:Window10,Python3.7,Anaconda3,Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库,用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

树(Tree) - 概念与基础

树的基本概念 树(Tree)是一种重要的数据结构,它在计算机科学中被广泛应用于各种算法和程序中。树是由节点(node)组成的层次结构,其中每个节点都有一个父节点,除了根节点外,每个节点都有零个或多个子节点。树的一个关键特点是没有…

Java云联his系统,支持电子病历四级,医院信息管理系统源码

SaaS模式Java语言开发的云HIS系统源码,支持电子病历四级,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。 云HIS系统…

matlab使用教程(33)—求解时滞微分方程(1)

1.时滞微分方程(DDE)的分类 时滞微分方程 (DDE) 是当前时间的解与过去时间的解相关的常微分方程。该时滞可以固定不变、与时间相关、与状态相关或与导数相关。要开始积分,通常必须提供历史解,以便求解器可以获取初始积分点之前的时间的解。 1.1常时滞 D…

二维动画制作软件 Animate 2024 for mac激活版

Animate 2024 for Mac是一款功能强大的二维动画制作软件,专为Mac用户打造。它提供了丰富的动画编辑功能,使用户能够轻松创建出生动逼真的动画作品。无论是短片、广告还是游戏等应用领域,Animate 2024都能发挥出出色的表现。 软件下载&#xf…

ArcGIS Pro导出布局时去除在线地图水印

目录 一、背景 二、解决方法 一、背景 在ArcGIS Pro中经常会用到软件自带的在线地图,但是在导出布局时,图片右下方会自带地图的水印 二、解决方法 解决方法:添加动态文本--服务图层制作者名单,然后在布局中选定位置添加 在状…

基于 Docker 的 python grpc quickstart

工作之后一直使用的 RPC 框架是 Apache 的 thrift,现在发现 grpc 更流行,所以也要学习一下,先来简单的跑一下 demo。在本地安装运行也很方便,不过因为有了 docker,所以在 docker 里面安装运行隔离性更好,顺…

多线程--深入探究多线程的重点,难点以及常考点线程安全问题

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【机器学习】K-近邻算法(KNN)介绍、应用及文本分类实现

一、引言 1.1 K-近邻算法(KNN)的基本概念 K-近邻算法(K-Nearest Neighbors,简称KNN)是一种基于实例的学习算法,它利用训练数据集中与待分类样本最相似的K个样本的类别来判断待分类样本所属的类别。KNN算法…

STM32工程 如何设置堆栈大小(Heap和Stack)

方法1:通过CubeMX、CubeIDE 配置 方法2:直接在启动文件中修改 (适合所有Keil工程) Heap、Stack的值大小,不管使用哪种开发环境,它俩都肯定在启动文件中。 可以通过CtrlF,搜索: Heap&#xff0…

iOS开发之Swift标识符

iOS开发之Swift标识符 在iOS开发中,使用Swift语言时,标识符是用来命名变量、常量、函数、类、结构体、枚举等程序实体的; 这些标识符使得Swift代码更加清晰、易于理解和维护。 一、变量与常量:var、let var代表variable&#…

算法练习—day1

title: 算法练习—day1 date: 2024-04-03 21:49:55 tags: 算法 categories:LeetCode typora-root-url: 算法练习—day1 网址:https://red568.github.io 704. 二分查找 题目: 题目分析: 左右指针分别为[left,right],每次都取中…

X86平台下Linux系统安装部署KVM,以及KVM一些配置

环境:银河麒麟SP1-V2303系统,X86架构,目标虚拟机为win10 一、安装 1.APT源安装 sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools qemu-system qemu-efi qemu-utils libvirt-clients libvirt-daemon-system …

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…

去班味的尽头是风险管理

运维工程师的“班味”是从风险管理就加重的。 什么是班味呢?指的是打工人身上特有的疲惫气质,面色憔悴、双目无神和腰酸背痛都是“班味”的显著表现。习惯性回复“收到,马上来”、不自觉唉声叹气、下班也提不起精神等症状,则说明…

GIS水文分析计算流向学习

1 初步操作 流向,即水文表面水的流向; 水文分析的很多功能需要基于流向栅格; 在 SuperMap 中,对中心栅格的8个邻域栅格进行编码; 每一个中心栅格的水流方向都由这八个值中的某一个值来确定; 我还没弄懂水…

Linux------一篇博客了解Linux最常用的指令

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:Linux 🤝希望本文对您有所裨益,如有不足之处&#…

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现: 从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个“非卖品”,它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值&#…

《C++程序设计》阅读笔记【1-函数】

🌈个人主页:godspeed_lucip 🔥 系列专栏:《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学,回复C程序设计获取下载链接。 1 函数1.1 概述1.2 函数定义、声明、原型1.3 变量1.3.1 全局变量1.3.…

【THM】Nmap Post Port Scans(后端口扫描)-初级渗透测试

介绍 本房间是 Nmap 系列的最后一个(网络安全简介模块的一部分)。在这个房间中,我们重点关注端口扫描之后的步骤:特别是服务检测、操作系统检测、Nmap脚本引擎和保存扫描结果。 Nmap实时主机发现Nmap基本端口扫描Nmap高级端口扫描Nmap后端口扫描在本系列的第一个房间中,我…