【嵌入式学习】FreeRTOS day04.05

练习

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

二进制信号量:信号量的数值只有0和1(用于共享资源的访问)

计数性信号量:计数型信号量的值一般是大于或者等于2(生产者和消费者模型)

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

复制代码
//生产者
void producerTask(void *pvParameters) {
    while (1) {
        if (xSemaphoreTake(xSemaphoreProducer, portMAX_DELAY) == pdTRUE) {
            // 生产操作
            produceItem();
            // 释放一个消费者信号量
            xSemaphoreGive(xSemaphoreConsumer);
        }
    }
}
//消费者
void consumerTask(void *pvParameters) {
    while (1) {
        if (xSemaphoreTake(xSemaphoreConsumer, portMAX_DELAY) == pdTRUE) {
            // 消费操作
            consumeItem();

            // 释放一个生产者信号量
            xSemaphoreGive(xSemaphoreProducer);
        }
    }
}

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

队列、信号量、互斥量、事件组、任务通知

FreeRTOS中的队列是用于任务之间的通信,遵循先进先出的规则。

信号量是一个长度为1的特殊队列,长度为1的空间用于存储信号量的计数值。

FreeRTOS中互斥量主要就是用于保护共享资源,保证数据访问的一致性和正确性

事件组是一种同步机制,用于任务之间的通信和同步。它允许任务等待多个事件的状态,并且可以在任何事件被设置时唤醒等待的任务。

任务通知通过TCB控制块来完成,需要创建。

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

队列、信号量、互斥量、事件组在使用之前都需要先创建,才能使用,任务通知无需创建即可使用。

队列、信号量、互斥量、事件组 多对多通信。任务通知是多对一通信。

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

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

软件定时器用于控制任务的执行时间。通过设置定时器,可以让某个任务在指定的时间后执行,实现任务的延时启动或周期性执行。

硬件定时器是基于硬件的,通常集成在微控制器或其他处理器中。它们利用硬件计数器进行计时,能够提供高精度的时间测量。硬件定时器直接由硬件支持,对系统资源的消耗相对较小。

软件定时器是通过软件算法实现的,依赖于操作系统的调度机制。它们的精度受到系统调度策略和当前系统负载的影响。软件定时器需要操作系统参与调度,可能会消耗更多的CPU资源,特别是在大量定时器活跃时。

相关推荐
前进的李工3 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律5 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
CCIE-Yasuo6 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga7 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野8 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光8 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
WEI_YANG_JU9 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩9 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦10 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
代码山河10 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目