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

29、【OS】【Nuttx】最小系统初始化分析(4):定时器(三)

背景

接前两篇定时器分析的wiki
27、【OS】【Nuttx】最小系统初始化分析(4):定时器(一)
28、【OS】【Nuttx】最小系统初始化分析(4):定时器(二)
这里对最小系统所用定时器做一个补充

报警器与定时器

在初始化时,有个细节,所初始化的定时器为 up_alarm_set_lowerhalf,而不是 up_timer_set_lowerhalf,up_alarm是报警器,本质也属于定时器,属于更专用的定时器,而 up_timer属于通用的定时器
在这里插入图片描述

  • up_timer:较为通用的定时器,适用于多种类型的需求,包括但不限于报警(alarm)、延时操作、周期性任务等
  • up_alarm:专门用于报警机制的定时器,通常是为了在未来的某个时间点触发一个事件(如发送信号给进程)

观察对比 up_timer(timer_callback)的回调函数,和 up_alarm(oneshot_callback) 的回调函数,没太大区别,最后都是用 nxsched_process_timer 处理定时器,之前wiki分析过 nxsched_process_timer,要求调用间隔为1个tick,会使用看门狗定时器来监控信号有没有超时,若超时则执行信号超时函数,且这俩函数都属于静态函数,不对外开放,可以理解只给Nuttx服务使用的
在这里插入图片描述

TICKLESS模式

在分析定时器时,可以经常看到 CONFIG_SCHED_TICKLESS 配置项,CONFIG_SCHED_TICKLESS 通常出现在支持可配置内核的实时操作系统(RTOS)或者类Unix操作系统中,比如Linux,用于启用TICKLESS模式,以优化CPU功耗和提高系统效率。

对于传统OS,通常有个定时器(如up_alarm)会以固定的频率触发(如10ms一次的TICK),无论系统是否有需要处理的任务,该定时器称为系统TICK。当启用了 CONFIG_SCHED_TICKLESS 选项后,系统将不会执行TICK任务。此时如果系统中没有任务需要执行,CPU可以保持在空闲状态下,而不必周期被TICK任务唤醒,以降低CPU功耗。

  • TICK模式
    在这里插入图片描述

  • TICKLESS模式
    在这里插入图片描述

TICK模式:

  • 计时:TICK任务可以提供时间基准
  • 实时性保障:对于需要满足严格实时要求的系统来说,TICK任务确保OS能够在预定的时间间隔内检查并响应事件,确保系统对外部事件的及时反应
  • 资源管理:TICK任务可以帮助OS跟踪和管理各种资源,如CPU使用率、内存占用等

TICKLESS模式:

  • 节能:TICK模式下,CPU即使在空闲时也会定期被TICK任务中断唤醒以检查是否有任务需要执行。而在 TICKLESS 模式中,CPU可以在没有待处理任务的情况下保持在空闲状态更长时间,直到下一个实际需要的时间点或事件发生
  • 复杂度增加:TICKLESS设计和实现更复杂,增加了代码维护难度(没了周期调度的保障,需要在各关键执行点插入对调度任务(如信号事件,Ready队列)的处理),需要考虑如何正确处理长时间间隔场景
  • 调试困难:系统行为将变得更加动态和难以预测,出现问题时,定位调试变得更加复杂

http://www.kler.cn/a/510301.html

相关文章:

  • 【QT用户登录与界面跳转】
  • 通过图形界面展现基于本地知识库构建RAG应用
  • 万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
  • 基于本地消息表实现分布式事务
  • 使用Pydantic驾驭大模型
  • 计算机网络 (41)文件传送协议
  • nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作
  • 精通Python (13)
  • 程序控制的角度
  • Flink概述
  • WPF 属性绑定详解
  • Unity 获取序列化对象属性详解
  • AIP-121 面向资源设计
  • Linux-----线程同步(条件变量)
  • 开源模型应用落地-工具使用篇-Spring AI-Function Call(八)
  • 爬虫第一篇
  • oneplus3t-lineage-14编译-android7
  • Jenkins搭建
  • 深度学习中的张量 - 使用PyTorch进行广播和元素级操作
  • 后盾人JS -- 好用的 JavaScript Symbol 类型
  • 【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法
  • C++实现设计模式---组合模式 (Composite)
  • RabbitMQ---TTL与死信
  • 参数校验 Spring Validation框架
  • 探秘Shortest与Stagehand:开启高效测试与自动化新篇
  • 【Idea】编译Spring源码 read timeout 问题