freeRTOS-day4

news2024/12/23 10:17:37

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

二进制信号量只有两个状态:0和1。它通常用于线程同步,表示某个线程执行完毕,另一个线程才能开始执行。这种特性使得二进制信号量特别适用于互斥访问共享资源的场景,如多个线程需要访问同一个临界区域。通过二进制信号量,可以确保同一时间只有一个线程能够进入临界区域,从而避免数据竞争和不一致性。

计数型信号量则可以有多个状态,其值通常表示可用的资源数量。计数型信号量主要用于控制资源的访问数量,适用于限制资源的访问数量的场景。计数型信号量的值一般是大于或者等于2(生产者和消费者模型)


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

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */

	for(;;)
	{
    osSemaphoreAcquire ( myCountingSem01Handle,osWaitForever);  //获取信号
		printf("我生产了500辆小汽车\r\n");
		osDelay(500);
	}
}
void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
		 osSemaphoreRelease(myCountingSem01Handle); //释放信号
		printf("我消费了500辆汽车\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.队列、信号量、互斥量、事件组 多对多通信。任务通知是多对一通信。

3.队列、信号量、互斥量、事件组需要被创建,所以消耗的资源也是比较多。任务通知不需要被创建消耗的资源少

5.根据文档和录屏学习一下软件定时器,了解软件定时器的作用和软件定时器和硬件定时器的区别

 软件定时器的作用:1.执行特定函数。2.系统资源管理。

软件定时器和硬件定时器的区别:

  1. 实现方式:硬件定时器是芯片本身提供的定时功能,一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。而软件定时器则是通过软件计算实现的,它依赖于操作系统的调度机制来计时。
  2. 精度和稳定性:硬件定时器的精度一般很高,可以达到纳秒级别,并且因为是中断触发方式,所以不受主程序执行的影响,因此能够提供更高的稳定性。而软件定时器的精度和稳定性受到CPU负载和操作系统调度策略的影响,可能存在延迟。
  3. 资源占用:软件定时器不需要硬件支持,只有在软件定时器回调函数被调用时才需要占用CPU时间。而硬件定时器则需要硬件资源的支持。

 

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

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

相关文章

ensp 通过cloud连接交换,通过本机直连telnet交换机

#连接图 #cloud配置 绑定本机一个虚拟网卡,勾选双向通信,这样就可以通过真机直接telent到交换机 #交换机配置 #需要将管理口ip配置为绑定的虚拟网卡同网段的IP,便于直接链接 system-view sysname s5700 undo info-center en telnet server…

HTTP 常见的状态码以及其适用场景

是什么 HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代码 它由 RFC 2616规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774与 RFC 4918等规范扩展 简单来讲&#…

什么是网络行为监控审计

网络行为监控审计,顾名思义,是指对网络使用者的行为进行实时监控,并对这些行为进行详细记录和审计的过程。 它涉及到对网络流量、用户操作、数据访问等多个方面的监控,旨在发现潜在的安全威胁和违规行为,从而保障网络…

视听杂志知网收录期刊投稿发表论文

《视听》是由国家新闻出版总署批准的正规的,兼有新闻传播、新媒体理论探索的当代学术性省级综合期刊。坚持正确的理论导向,全面展示广播影视事业发展中出现的新情况、新事物,探索现代传媒基础理论,研究网络传播、通讯传播等新媒体…

职场中持续加班的原因、影响及应对策略

在当今竞争激烈的职场环境中,加班已经成为许多行业的常态。本文将探讨持续加班的原因、对员工和企业的负面影响,以及应对持续加班的策略。 一、持续加班的原因 1. 工作任务繁重:在许多企业中,工作任务量过大,员工为了完…

Sora的阅读技术报告

sora的技术报告 走进sorasora的特性sora的介绍sora的实际操作sora的发展安全措施研究技术 走进sora 大家好,我是清风之上。随着人工智能的发展,慢慢的他已经出现在我们生活中的各个角落,其中有API推出的sora,让我们震惊不已&…

Linux多进程通信(4)——消息队列从入门到实战!

Linux多进程通信总结——进程间通信看这一篇足够啦! 1.基本介绍 1)消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构,向消息队列中写数据,实际上是向这个数据结构中插入一个…

页面转word的那些事

背景 有些时候需要将页面内容或者是页面的数据通过word进行下载,以方便客户进行二次编辑,而不是直接导出图片或者是pdf。 想在页面端点击下载成word,那必然需要服务端来进行读写文件,无论是你后端编辑好的内容流,还是…

MySQL如何创建存储过程

工作中有时候需要自己去创建存储过程,然后调用存储去获得一些数据等,接下来就给大家介绍下MySQL如何创建存储过程。 语法: CREATE PROCEDURE 存储程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过…

git生成ssh key并推送到远端仓库

ssh-keygen -t rsa -C "anarckkgmail.com"在用户文件夹中找到id_rsa.pub,把内容复制到gitea的配置里,然后直接用git推送就可以了

HTML基础知识详解(下)(如果想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言:在上一篇文章中,我们已经学习完了超链接标签、列表标签和表格标签,但是我们还有一些标签没有学习,在这篇文章中,我们将学习剩余的标签。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页…

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言,采用经典遗传算法(GA)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段参…

前端零基础学习web3开发

目录 1 钱包 2 发起交易 3 出块 4 块高 5 矿工 6 Gas费 这一节,我们不说让人神往的比特币,不说自己会不会利用这个虚拟的货币来发财,也不说那些模模糊糊的知识,什么去中心化啦,什么奇妙的加密啦,我们…

深入浅出 -- 系统架构之负载均衡Nginx缓存机制

一、Nginx缓存机制 对于性能优化而言,缓存是一种能够大幅度提升性能的方案,因此几乎可以在各处都能看见缓存,如客户端缓存、代理缓存、服务器缓存等等,Nginx的缓存则属于代理缓存的一种。对于整个系统而言,加入缓存带来…

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3

1.8.4 卷积神经网络近年来在结构设计上的主要发展和变迁——Inception-v2 和Inception-v3 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet 1.8.3 卷积神经网络近年来…

Flask Python Flask-SQLAlchemy中数据库的数据类型、flask中数据可的列约束配置

Flask Python Flask-SQLAlchemy中数据库的数据类型、flask中数据可的列约束配置 SQLAlchemy官方文档地址实战的代码分享数据类型列约束配置自定义方法 SQLAlchemy官方文档地址 SQLAlchemy官方文档地址 实战的代码分享 Flask-SQLAlchemy框架为创建数据库的实例提供了一个基类…

【计算机毕业设计】五台山景点购票系统,后附源码

🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…

测试框架pytest学习与实践

pytest是一个专业的测试框架,可以帮助我们对python项目进行测试,提高测试的效率。 pytest官网手册:pytest: helps you write better programs — pytest documentation 中文手册:Pytest 教程 入门学习 安装pytest pip install…

2023护网行动经验分享(2024护网招人)

今年的护网又开始摇人了,不知道大家有想法没? 去年的护网结束之后,朋友圈感觉是在过年,到处是倒计时和庆祝声。 看得出来防守方们7*24小时的看监控还是比较无奈的。 本次复盘基于我对整个护网行动的观察总结而来,仅…

CSS弹性布局:Flex布局及属性完全指南,点击解锁新技能!

Flex 布局是一种新型的 CSS 布局模式,它主要用于弹性盒子布局。相比于传统的布局方式,它更加灵活,易于调整,也更加适应不同的设备和屏幕尺寸。 下面我们就来详细解析 Flex 布局及其属性,帮助大家深入理解和运用 Flex …