当前位置: 首页 > news >正文

中山网站建设的价格茂名建站价格

中山网站建设的价格,茂名建站价格,2024年新手机上市时间表,什么网站能免费嵌入式通信机制考点:消息队列、信号量与互斥锁 📌 本文属于《嵌入式工程师面试不再难》专栏第 4 篇,主要解析嵌入式操作系统中的 任务通信机制:消息队列、信号量和互斥锁。 面试官经常会在笔试题或面试环节考你这部分,…

嵌入式通信机制考点:消息队列、信号量与互斥锁

📌 本文属于《嵌入式工程师面试不再难》专栏第 4 篇,主要解析嵌入式操作系统中的 任务通信机制:消息队列、信号量和互斥锁。
面试官经常会在笔试题或面试环节考你这部分,本文带你用 简单易懂的方式 搞懂这些核心考点。


目录

  1. 为什么需要任务间通信?
  2. 消息队列(Message Queue)
  3. 信号量(Semaphore)
  4. 互斥锁(Mutex)
  5. 三者的比较总结
  6. 面试答题技巧
  7. 总结

一、为什么需要任务间通信?

在单任务系统里,所有逻辑都在一个循环里跑,变量共享即可。
但在 实时操作系统(RTOS) 里,任务是独立调度的:

  • 任务 A:采集传感器数据
  • 任务 B:进行滤波和运算
  • 任务 C:通过 UART 把结果发给上位机

👉 如果这些任务需要共享数据或同步操作,必须通过 通信机制 来协调,避免数据竞争和混乱。

常见机制有:全局变量 + 临界区、事件标志、消息队列、信号量和互斥锁等。
其中 消息队列、信号量、互斥锁 是面试最常考的。


二、消息队列(Message Queue)

1. 概念

消息队列就是一个 先进先出(FIFO)的数据通道,任务 A 可以往里面放消息,任务 B 从里面取消息。

✅ 优点:

  • 任务解耦
  • 带缓存
  • 支持阻塞等待

2. 面试常见问题

  • 消息队列和共享内存有什么区别?

    • 共享内存效率高,但需要锁保护。
    • 消息队列更安全,带有同步机制。
  • 消息队列能传什么?

    • 可以传基本数据(int、float),也能传结构体指针,但要注意内存管理。

3. 示例代码(基于 FreeRTOS)

#include "FreeRTOS.h"
#include "queue.h"QueueHandle_t xQueue;void TaskA(void *pvParameters) {int data = 100;while (1) {xQueueSend(xQueue, &data, portMAX_DELAY);data++;vTaskDelay(pdMS_TO_TICKS(1000));}
}void TaskB(void *pvParameters) {int recvData;while (1) {if (xQueueReceive(xQueue, &recvData, portMAX_DELAY)) {printf("Received: %d\n", recvData);}}
}int main(void) {xQueue = xQueueCreate(5, sizeof(int));xTaskCreate(TaskA, "Producer", 128, NULL, 1, NULL);xTaskCreate(TaskB, "Consumer", 128, NULL, 1, NULL);vTaskStartScheduler();
}

三、信号量(Semaphore)

1. 概念

信号量是一个 计数器,常用于 任务同步资源访问控制

  • 二值信号量(Binary Semaphore):0/1,用于事件通知。
  • 计数信号量(Counting Semaphore):可大于 1,用于资源数量控制。

2. 面试常见问题

  • 二值信号量和互斥锁区别?

    • 二值信号量没有优先级继承,可能出现优先级反转。
    • 互斥锁专门为资源保护设计。
  • 什么时候用信号量?

    • 常用于 中断通知任务

3. 示例代码(中断 + 任务)

SemaphoreHandle_t xBinarySemaphore;void EXTI_IRQHandler(void) {BaseType_t xHigherPriorityTaskWoken = pdFALSE;xSemaphoreGiveFromISR(xBinarySemaphore, &xHigherPriorityTaskWoken);portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}void TaskHandler(void *pvParameters) {while (1) {if (xSemaphoreTake(xBinarySemaphore, portMAX_DELAY)) {printf("Interrupt event handled!\n");}}
}int main(void) {xBinarySemaphore = xSemaphoreCreateBinary();xTaskCreate(TaskHandler, "TaskHandler", 128, NULL, 2, NULL);vTaskStartScheduler();
}

四、互斥锁(Mutex)

1. 概念

互斥锁用于 保护共享资源,同一时间只允许一个任务访问临界区。

特点:

  • 独占访问
  • 优先级继承机制(避免优先级反转)

2. 面试常见问题

  • 互斥锁 vs 信号量?

    • 互斥锁 → 用于保护共享资源
    • 信号量 → 用于任务/中断同步
  • 什么是优先级反转?

    • 高优先级任务被迫等待低优先级任务释放锁,而低优先级任务又被中等优先级任务打断,导致系统性能下降。

3. 示例代码

SemaphoreHandle_t xMutex;void Task1(void *pvParameters) {while (1) {if (xSemaphoreTake(xMutex, portMAX_DELAY)) {printf("Task1 using UART\n");vTaskDelay(pdMS_TO_TICKS(500));xSemaphoreGive(xMutex);}}
}void Task2(void *pvParameters) {while (1) {if (xSemaphoreTake(xMutex, portMAX_DELAY)) {printf("Task2 using UART\n");vTaskDelay(pdMS_TO_TICKS(500));xSemaphoreGive(xMutex);}}
}

五、三者的比较总结

特性消息队列信号量互斥锁
主要作用任务间数据传递任务/中断同步保护共享资源
是否传输数据✅ 可以(整型、结构体等)❌ 不传输数据,仅信号❌ 不传输数据,仅加锁解锁
阻塞机制队列满/空时可阻塞计数为 0 时阻塞已被占用时阻塞
优先级继承机制✅ 支持
使用场景任务间解耦、缓冲数据中断 → 任务通知,任务同步多任务共享 UART、I2C 等外设

六、面试答题技巧

  • 信号量 vs 互斥锁

    信号量是任务间同步机制,本质是计数器;互斥锁是资源保护机制,带优先级继承。

  • 什么时候用消息队列?

    当任务间需要传输数据、解耦时,比如 传感器任务 → 通信任务

  • 优先级反转怎么解决?

    使用互斥锁的优先级继承机制。


七、总结

  • 消息队列:用于任务间传输数据
  • 信号量:用于同步任务/中断
  • 互斥锁:用于资源保护

在面试中,最好结合 场景化例子 来回答:

  • 信号量 → 中断触发任务
  • 互斥锁 → 多任务共享外设
  • 消息队列 → 数据处理流水线

只要你能结合实际案例讲清楚,面试官一定会点头。


http://www.dtcms.com/a/503961.html

相关文章:

  • 定远建设局官方网站怎么制作自己的个人网站
  • 南宁响应式网站制作中企动力做网站 知乎
  • 制作公司网站有哪些好处微信公众号怎么二次开发
  • 保持电脑不息屏-skill
  • 配置openguass 教程(自存)
  • 3.4循环控制
  • 上海发乐门网站建设公司鞍山招聘网最新招聘
  • FastAPI之 Python的类型提示
  • 注意力机制(Attention)介绍和示例
  • 做网站要实名吗呼和浩特网站运营公司
  • 做网站二维码怎样自己做网络推广网站
  • 望牛墩做网站中国空间站对接成功
  • 6.3 文件传输协议 (答案见原书 P277)
  • BLDC电机矢量控制(FOC)深度解析:从理论到实践
  • MySQL中常见的锁
  • 浙江杭州seo网站建设网站优化在微信上做网站
  • 招商网站平网站平台地方购物网站盈利模式
  • 网站建设培训心得南京紫米网络科技有限公司
  • 【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
  • 怎么做酒店网站网页设计教程ppt
  • 深圳宝安美容医院网站建设想学网站建设优化去哪
  • 分布式组件【ZooKeeper】
  • 基于windows 11 的python编译开发环境部署
  • 建设银行江苏分行网站最新消息今天的新闻
  • STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战
  • 免费做二维码网站网站内容设计遵循的原则有
  • 一家专门做原产地的网站wordpress产品图片框
  • Annual Comedy Competition (Season 1)
  • 网站开发json解析大连seo代理计费
  • 网站失败后怎么重新建设创建全国文明城市简报