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

【计算机基础】-20-RT-Thread-硬定时器中中断上下文控制、软件定时器是timer系统线程控制、线程Delay延时是各个线程上下文控制,且线程控制块只有一个延时时间。

  1. 硬定时器 → 中断上下文控制
  2. 软定时器 →timer系统线程控制
  3. 线程 Delay 延时 → 各自线程上下文控制,且每个线程控制块(TCB)只有一个延时时间字段

一、逐条详解

1.硬定时器:中断上下文控制

  • 执行位置:系统节拍中断(如 SysTick ISR)中直接调用回调函数。
  • 特点
    • 无任务切换,开销极小;
    • 不能阻塞,只能使用 ISR-safe API;
    • 回调函数必须短小、快速。
  • 典型用途:LED 闪烁、硬件寄存器操作、快速事件通知。

📌关键:运行在中断上下文与任何线程无关。


2.软定时器:timer系统线程控制

  • 前提:启用RT_USING_TIMER_SOFT
  • 执行位置:内核创建的统一系统线程"timer"中。
  • 工作机制
    • SysTick 中断仅标记到期的软定时器;
    • timer线程被唤醒后,串行执行所有到期回调
  • 特点
    • 回调运行在线程上下文,可调用任意阻塞 API
    • 所有软定时器共享同一个timer线程,回调串行执行(一个阻塞会影响后续);
    • 优先级由RT_TIMER_THREAD_PRIO配置(默认为 0,最高优先级之一)。

📌关键不是在创建者线程中执行,而是在唯一的timer线程中执行


3.线程 Delay:各自线程上下文控制,且 TCB 只有一个延时时间字段

这是 RT-Thread 调度器设计的核心细节,非常准确

▶ 每个线程独立延时
  • 调用rt_thread_delay(tick)时,当前线程被挂起,调度器切换到其他就绪线程;
  • 延时期间,该线程不占用 CPU
  • 延时到期后,线程状态变为就绪,等待调度。
▶ TCB 中只有一个延时字段

在 RT-Thread 的线程控制块(struct rt_thread)中,确实只有一个延时计数器

struct rt_thread { ... rt_ubase_t init_tick; // 初始延时值(用于 rt_thread_delay()) rt_ubase_t remaining_tick; // 剩余延时 tick 数 ... };
  • 含义
    • remaining_tick表示该线程还需等待多少个系统节拍;
    • 每次 SysTick 中断,调度器会遍历所有延时线程,remaining_tick减 1
    • remaining_tick == 0,线程被唤醒。
▶ 重要限制:
  • 一个线程同一时间只能处于一种延时状态;
  • 如果你在延时期间再次调用rt_thread_delay()会覆盖之前的延时
  • 这也是为什么 RT-Thread不支持“多定时器 per thread”—— 若需多个定时行为,应使用软件定时器多个线程

✅ 举例:

void thread_entry(void *param) { rt_thread_delay(100); // 设置 remaining_tick = 100 rt_thread_delay(50); // 覆盖为 50,前一个 100 被丢弃 }

二、三者对比总结表

机制执行上下文控制主体能否阻塞延时存储位置是否可多实例
硬定时器中断上下文(SysTick ISR)中断服务程序❌ 否定时器对象内部✅ 多个硬定时器
软定时器timer系统线程统一timer线程✅ 是定时器对象内部✅ 多个软定时器(串行执行)
线程 Delay各自线程上下文调度器 + TCB✅ 是(主动让出)TCB 中的remaining_tick(唯一)❌ 一个线程只能有一个延时

三、设计哲学与最佳实践

  • 硬定时器:用于最紧急、最轻量的时间触发;
  • 软定时器:用于需要调用复杂 API 的周期性任务
  • 线程 Delay:用于任务自身的节奏控制,但不要依赖它实现高精度定时(受调度影响)。

🔑黄金法则

  • 中断上下文要快→ 用硬定时器;
  • 需要阻塞/复杂逻辑→ 用软定时器;
  • 简单任务节奏→ 用线程 Delay。

✅ 结论

三句话精准、专业、符合 RT-Thread 内核实现,是对 RT-Thread 时间管理机制的高度凝练总结尤其指出“线程控制块只有一个延时时间”,体现了对内核数据结构的深入理解。

这正是编写高效、可靠 RTOS 应用的基础认知。

http://www.jsqmd.com/news/373909/

相关文章:

  • 2026年2月实测口碑品牌揭晓:中国商标律所三维竞争力深度解析 - 品牌推荐
  • 学校站群如何通过CKEditor组件实现PPT动画公式Word导入?
  • 2026年2月中国商标律所推荐:基于合规风险与全球化布局痛点的五强权威评价 - 品牌推荐
  • 阿里云国际站服务器防火墙如何采用及防护???
  • 金融风控平台如何通过CKEditor实现Word公式多级列表转存?
  • claude code 全局规则
  • 救命神器! 降AI率工具 千笔AI VS 云笔AI,本科生专属推荐!
  • libcamera log等级设置
  • 信创环境下,JAVA网页大文件上传有何解决方案?
  • 警惕!90%的GEO项目失败,是因为选错了“流派”(写给CMO的避坑指南) - 品牌观察员小捷
  • 专科生必看!千笔AI,巅峰之作的降AI率软件
  • 国企项目中,JAVA网页大文件上传怎么解决?
  • 计算机毕业设计|基于springboot + vue非遗文化传承网站系统(源码+数据库+文档)
  • 医院电子病历如何用CKEditor处理PDF签名公式跨平台粘贴?
  • 乡村振兴果蔬生产过程管理|基于java+ vue乡村振兴果蔬生产过程管理系统(源码+数据库+文档)
  • 2025年JIM SCI2区,基于Q学习多目标粒子群算法+节能型分布式流水车间调度,深度解析+性能实测
  • 少走弯路:10个AI论文网站深度测评,MBA毕业论文与科研写作必备工具推荐
  • 国防文档系统如何解决CKEditor粘贴Word艺术字公式问题?
  • 2026铝合金衬塑复合管制造厂排行解析,选对好厂家,PPR铝合金衬塑复合管,铝合金衬塑复合管制造商口碑推荐榜 - 品牌推荐师
  • 基于java + vue乡村振兴果蔬生产过程管理系统(源码+数据库+文档)
  • Studio 3T 2026.2 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
  • 2026年江苏全自动双面胶机优质厂家排名,看看有哪些 - 工业品牌热点
  • 计算机毕业设计|基于springboot + vue校园食堂管理系统(源码+数据库+文档)
  • Modbus TCP/RTU、OPC UA 和 MQTT 是工业自动化和物联网(IoT)领域中常用的通信协议
  • 2026年江西靠谱的电商直播和短视频运营培训学校排行榜 - myqiye
  • Deepoc 具身模型开发板:赋能电厂巡检机器人,筑牢能源运维智能防线
  • 2026投影机市场新动向:供应商实力大比拼,山体投影机出租/投影仪/4K投影机出租/2万流明投影机,投影机品牌推荐榜 - 品牌推荐师
  • 2026国内质量优的无人机机库,权威供应厂家知多少?无人机机库/无人机巡检/室内无人机机库,无人机机库销售厂家哪家强 - 品牌推荐师
  • 因果推断:破解测试活动价值评估的“黑箱”困局
  • MatIEC 编译器 Stage1_2 模块深度解析