RTOS-F429-HAL-临界段保护及任务调度器的挂起(2026/7/28)
目录一FreeRTOS 临界段保护机制完整梳理一、为什么需要临界段二、底层硬件操作Cortex-M三、两套 API 的划分依据四、任务级计数器模式1API2内部逻辑3嵌套示例4典型使用五中断级1API2内部逻辑六使用约束二任务调度器的挂起和恢复1函数原型2禁止了什么 vs 保留了什么3与 taskENTER_CRITICAL 对比4使用条件全部满足才能用5代码示例一FreeRTOS 临界段保护机制完整梳理一、为什么需要临界段多任务 中断场景下共享资源会被并发访问。比如// 任务 A 正在修改一个全局链表 // 中断来了ISR 里也修改同一个链表 // 链表指针被破坏 → 崩溃临界段通过临时屏蔽中断来保证一段代码的原子性禁止其他任务或 ISR 抢占二、底层硬件操作Cortex-M核心寄存器是 BASEPRIBASEPRI 值效果0不屏蔽任何中断非 0屏蔽所有优先级 ≥ 该值的逻辑中断关键设计不是全局关中断而是只屏蔽受 FreeRTOS 管理的中断优先级 ≥configMAX_SYSCALL_INTERRUPT_PRIORITY。高优先级的紧急中断如电机刹车不受影响。三、两套 API 的划分依据任务上下文中断上下文有无户口✅ 有 TCB可以维持状态❌ 没有借道执行状态存储位置TCB →uxCriticalNesting栈上局部变量UBaseType_t工作模式计数器模式快照-恢复模式嵌套支持✅ 支持❌ 不支持四、任务级计数器模式1APIvoid taskENTER_CRITICAL(void); void taskEXIT_CRITICAL(void);2内部逻辑taskENTER_CRITICAL: if (uxCriticalNesting 0) 写 BASEPRI configMAX_SYSCALL_INTERRUPT_PRIORITY // 真正关中断 uxCriticalNesting ​ taskEXIT_CRITICAL: uxCriticalNesting-- if (uxCriticalNesting 0) 写 BASEPRI 0 // 真正开中断3嵌套示例uxCriticalNesting 0 // 初始状态中断开着 ​ taskENTER_CRITICAL() // 0→1 关中断 ✅ taskENTER_CRITICAL() // 1→2 不管 taskENTER_CRITICAL() // 2→3 不管 taskEXIT_CRITICAL() // 3→2 不管 taskEXIT_CRITICAL() // 2→1 不管 taskEXIT_CRITICAL() // 1→0 开中断 ✅ ← 归零4典型使用void TaskA(void *pv) { for (;;) { taskENTER_CRITICAL(); // 访问共享队列 / 全局变量 // 可以调用写临界区的子函数自动形成嵌套 taskEXIT_CRITICAL(); } }五中断级 : 无定时器1APIUBaseType_t taskENTER_CRITICAL_FROM_ISR(void); void taskEXIT_CRITICAL_FROM_ISR(UBaseType_t uxSavedInterruptStatus);2内部逻辑taskENTER_CRITICAL_FROM_ISR: 读 BASEPRI当前寄存器的值然后赋值给 uxSaved // 记下在中断进入临界区前对应的BASEPRI寄存器值 写 BASEPRI configMAX_SYSCALL_INTERRUPT_PRIORITY // 不用管其他内容先关掉中断进入临界区执行任务。 return uxSaved ​ taskEXIT_CRITICAL_FROM_ISR(uxSaved)://临界区干的事情结束后把中断重新开启退出临界区 写 BASEPRI uxSaved // 按照片复原不越权改变状态把一开始记下的BASEPRI寄存器值写回给BASEPRI寄存器六使用约束约束说明临界区要短关中断 延迟所有同优先级的 ISR 响应破坏实时性不能阻塞临界区内调用vTaskDelay()、带超时的队列操作 → 死锁调度器需要中断中断被关了严格配对漏一个EXIT 永久关中断系统停摆禁止混用ISR 里用任务级 → 读写的是不属于自己的 TCB 字段未定义行为禁止嵌套中断级没有计数器重复 ENTER 会覆盖上一个uxSaved第二个 EXIT 恢复的是第二个 ENTER 拍的照片第一个的状态就丢了二任务调度器的挂起和恢复1函数原型void vTaskSuspendAll(void) { uxSchedulerSuspended; // 只加一个全局计数器不碰硬件 } ​ BaseType_t xTaskResumeAll(void) { --uxSchedulerSuspended; if (uxSchedulerSuspended 0) { // 恢复挂起期间积压的任务就绪操作 // 可能立即触发上下文切换 } return pdTRUE / pdFALSE; // 是否发生了任务切换 }2禁止了什么 vs 保留了什么任务调度 ❌ 停摆不会切走当前任务 任务切换 ❌ 冻结 时间片轮转 ❌ 暂停 中断 ✅ 正常响应 ISR 调度 ✅ 正常执行3与 taskENTER_CRITICAL 对比vTaskSuspendAlltaskENTER_CRITICAL关中断❌✅关调度✅✅pendsv 是最低优先级的中断ISR 中使用❌✅FROM_ISR 版嵌套✅✅开销极低变量自增低写 BASEPRI适用场景仅任务间竞争任务 ISR 间竞争4使用条件全部满足才能用共享资源没有任何 ISR 访问临界区内不调用可能阻塞的 API代码块一条直线走到尾不中途 return/break5代码示例vTaskSuspendAll(); // 1. 挂起调度器 { access_shared_list(); // 2. 干正事 } BaseType_t wasSwitched xTaskResumeAll(); // 3.恢复调度器同时定义一个变量接受它的返回值 if(wasSwitched pdTRUE) // 4. 返回pdTRUE 说明恢复调度器的一瞬间它其实已经切出去完成其他任务了执行完回来执行 余下的代码 { // 例如记录日志或者增加一个“被抢占次数”的统计变量 ulPreemptionCount; } //5.返回pdFALSE说明恢复调度器的一瞬间没有切去执行其他任务那if 不满足 // 接下来执行余下的代码vTaskDelay(pdMS_TO_TICKS(10)); vTaskDelay(pdMS_TO_TICKS(10));

相关新闻

大件空运包装闯关实录:ASTM D4169 DC-12 测试全解析

大件空运包装闯关实录:ASTM D4169 DC-12 测试全解析

一、分清赛道:DC-12 只给 “重型空运选手” 闯关ASTM D4169 就像物流界的闯关游戏,18 套分配周期对应不同运输赛道,DC-12 是空陆联运赛道里重型货物专属副本。 它有严格入场门槛:单件重量超 68.1 公斤,或是带托盘整装的…

2026/7/29 0:53:57阅读更多 →
如何永久保存并智能分析你的微信聊天记录?WeChatMsg留痕完整指南

如何永久保存并智能分析你的微信聊天记录?WeChatMsg留痕完整指南

如何永久保存并智能分析你的微信聊天记录?WeChatMsg留痕完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…

2026/7/29 0:53:57阅读更多 →
如何在浏览器中零成本体验完整的Windows 12操作系统

如何在浏览器中零成本体验完整的Windows 12操作系统

如何在浏览器中零成本体验完整的Windows 12操作系统 【免费下载链接】win12 Win12 Online 项目地址: https://gitcode.com/gh_mirrors/wi/win12 你是否想过在不安装任何软件的情况下,就能体验Windows 12的全新界面和操作方式?现在,通过…

2026/7/29 0:53:57阅读更多 →
[具身智能-675]:ROSMASTER M1 属于教学 / 科研实验平台,不属于商用落地机器人产品;通俗来讲可以称作 “开发教具”,亚博提供大量相互独立的示例 Demo,缺少工程化一体化软件框架。

[具身智能-675]:ROSMASTER M1 属于教学 / 科研实验平台,不属于商用落地机器人产品;通俗来讲可以称作 “开发教具”,亚博提供大量相互独立的示例 Demo,缺少工程化一体化软件框架。

ROSMASTER M1 定位详解原文:ROSMASTER M1 属于教学 / 科研实验平台,不属于商用落地机器人产品;通俗来讲可以称作 “开发教具”,亚博提供大量相互独立的示例 Demo,缺少工程化一体化软件框架。 下面分维度逐层拆解&#…

2026/7/29 2:00:14阅读更多 →
电容式触摸技术原理与应用全解析

电容式触摸技术原理与应用全解析

1. 电容式触摸技术的前世今生 2007年1月9日,旧金山Moscone West会议中心,当乔布斯在Macworld大会上首次展示iPhone的多点触控功能时,全场观众起立鼓掌。这个划时代的交互方式背后,正是电容式触摸技术的完美呈现。与当时主流的电阻…

2026/7/29 2:00:14阅读更多 →
《P10721 [GESP202406 六级] 计算得分》

《P10721 [GESP202406 六级] 计算得分》

题目背景 对应的选择、判断题:试题 - GESP 202406 C 六级 - 洛谷有题 题目描述 小杨想要计算由 m 个小写字母组成的字符串的得分。 小杨设置了一个包含 n 个正整数的计分序列 A[a1​,a2​,…,an​],如果字符串的一个子串由 k(1≤k≤n) 个 abc 首尾相…

2026/7/29 2:00:14阅读更多 →
上线一周只有 10 个用户,我做对了什么,又做错了什么(二)

上线一周只有 10 个用户,我做对了什么,又做错了什么(二)

第一篇的链接:从零到上线:我用 WorkBuddy AI 一天构建 SEO 工具站全流程(一)-CSDN博客 前言 上一篇文章写到,我用 WorkBuddy 一天构建了一个 15 工具的 SEO 站点,信心满满地部署上线,觉得马上…

2026/7/29 2:00:14阅读更多 →
采用高强度瓦楞重型纸箱对于降低供应链整体包装成本的逻辑是什么?

采用高强度瓦楞重型纸箱对于降低供应链整体包装成本的逻辑是什么?

#### 一、高强度瓦楞重型纸箱的概念界定高强度瓦楞重型纸箱通常指采用五层AB楞、七层瓦楞等结构,搭配高强牛卡纸面纸的工业包装产品,通过优化瓦楞结构与材料配比,在保证高承载、高防护性能的前提下,替代传统木箱、普通纸箱等包装方…

2026/7/29 2:00:13阅读更多 →
MHMarkets迈汇:“油价回落考验避险情绪”

MHMarkets迈汇:“油价回落考验避险情绪”

Yahoo Finance报道称,美国与伊朗暂缓进一步攻击后,国际油价在周日晚间交易中从近期高位回落,市场对突发供应中断的担忧有所降温。MHMarkets迈汇表示,油价下行并不意味着风险完全消失,而是交易员开始重新衡量地缘溢价、…

2026/7/29 1:58:13阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →