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

【嵌入式FreeRTOS#补充1】临界区

一、临界区意义

  1. 保护共享资源:当多个任务(线程)可能同时访问同一个共享资源(如全局变量、硬件寄存器等)时,临界区可以确保只有一个任务能进入这段代码,防止出现数据竞争或不一致的问题。

  2. 关闭中断 / 调度:进入临界区时,系统通常会暂时关闭中断响应或任务调度功能,确保当前任务的执行不会被其他任务或中断打断,直到调用对应的退出临界区函数(如 taskEXIT_CRITICAL();)才恢复。

  3. 保证操作原子性:对于需要连续执行的一系列操作(如读取 - 修改 - 写入共享变量),临界区能保证这些操作作为一个整体完成,不会被其他任务分割

二、进入方式

        进入临界区

 taskENTER_CRITICAL(); 

        退出临界区

taskEXIT_CRITICAL();

三、调用示例

        在起始任务中,我们一次创建了多个任务,这些任务优先级都比起始任务高,如果不能强制修改优先级,则必须给它一个临界区,避免创建过程中被自己创建的任务打断。

void Start_Task( void * pvParameters )
{taskENTER_CRITICAL();               /* 进入临界区 */xTaskCreate((TaskFunction_t         )   Task1,(char *                 )   "Task1",(configSTACK_DEPTH_TYPE )   TASK1_STACK_DEPTH,(void *                 )   NULL,(UBaseType_t            )   TASK1_PRIORITY,(TaskHandle_t *         )   &task1_handler );xTaskCreate((TaskFunction_t         )   Task2,(char *                 )   "Task2",(configSTACK_DEPTH_TYPE )   TASK2_STACK_DEPTH,(void *                 )   NULL,(UBaseType_t            )   TASK2_PRIORITY,(TaskHandle_t *         )   &task2_handler );xTaskCreate((TaskFunction_t         )   Task3,(char *                 )   "Task2",(configSTACK_DEPTH_TYPE )   TASK3_STACK_DEPTH,(void *                 )   NULL,(UBaseType_t            )   TASK3_PRIORITY,(TaskHandle_t *         )   &task3_handler );vTaskDelete(NULL);                  taskEXIT_CRITICAL();                /* 退出临界区 */
}

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

相关文章:

  • K-means 聚类算法学习笔记
  • 解锁PostgreSQL专家认证增强驱动引擎
  • 打靶日常-sql注入(手工+sqlmap)
  • 136-基于Spark的酒店数据分析系统
  • Python Sqlalchemy数据库连接
  • 紫金桥RealSCADA:国产工业大脑,智造安全基石
  • 【已解决】在Spring Boot工程中,若未识别到resources/db文件夹下的SQL文件
  • JavaScript 防抖(Debounce)与节流(Throttle)
  • 易道博识康铁钢:大小模型深度融合是现阶段OCR的最佳解决方案
  • 【Trans2025】计算机视觉|UMFormer:即插即用!让遥感图像分割更精准!
  • Notepad++插件开发实战指南
  • Radar Forward-Looking Imaging Based on Chirp Beam Scanning论文阅读
  • 《WINDOWS 环境下32位汇编语言程序设计》第1章 背景知识
  • 【Linux】探索Linux虚拟地址空间及其管理机制
  • C# HangFire的使用
  • 概率论基础教程第2章概率论公理(习题和解答)
  • 在 Linux 服务器搭建Coturn即ICE/TURN/STUN实现P2P(点对点)直连
  • HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
  • pyecharts可视化图表-pie:从入门到精通(进阶篇)
  • Python 数据可视化:柱状图/热力图绘制实例解析
  • 概率论基础教程第2章概率论公理
  • 享元模式C++
  • 基于深度学习的零件缺陷识别方法研究(LW+源码+讲解+部署)
  • 力扣hot100 | 普通数组 | 53. 最大子数组和、56. 合并区间、189. 轮转数组、238. 除自身以外数组的乘积、41. 缺失的第一个正数
  • 什么才是真正的白盒测试?
  • 专题三_二分_x 的平方根
  • JavaScript 解析 Modbus 响应数据的实现方法
  • 记录处理:Caused by: java.lang.UnsatisfiedLinkError
  • MARCONet++ 攻克中文文本图像超分难题
  • 疯狂星期四文案网第40天运营日记