[其它应用] 实现非阻塞的延时的几种方法

[复制链接]
5131|3
 楼主| elephant00 发表于 2025-1-9 10:53 | 显示全部楼层 |阅读模式
定时器中断:
配置一个定时器,使其在一定时间后产生中断。
在中断服务程序(ISR)中,执行与延时相关的操作或设置标志位。
主程序可以通过检查这个标志位来判断延时是否结束。
实时操作系统(RTOS):
使用RTOS提供的延时函数,这些函数通常基于定时器中断或系统时钟。
RTOS能够管理多个任务,并在延时期间调度其他任务运行。
软件定时器:
实现一个软件定时器,该定时器在每次系统时钟中断时更新其计数器。
主程序可以检查软件定时器的值来判断延时是否结束。
状态机:
将系统实现为状态机,其中每个状态都有一个与之关联的延时。
在状态转换时,启动一个定时器或软件计数器来跟踪延时。
当延时结束时,系统进入下一个状态。
硬件定时器与软件配合:
使用单片机内置的硬件定时器来生成精确的延时。
通过读取定时器的值或使用定时器中断来检查延时是否结束。
轮询与休眠:
在不需要精确延时的情况下,可以通过轮询和休眠的方式来实现非阻塞延时。
主程序在检查某个条件(如标志位或硬件状态)时,如果没有满足条件,则进入低功耗休眠模式。
当条件满足时(如通过中断唤醒),主程序继续执行。
OKAKAKO 发表于 2025-1-21 20:15 | 显示全部楼层
配置一个定时器,使其在一定时间后产生中断。
中国龙芯CDX 发表于 2025-6-28 21:53 | 显示全部楼层
低功耗休眠模式非常重要的
桃乐丝 发表于 2025-6-30 15:38 | 显示全部楼层
非阻塞延时方法:

定时器中断:设全局标志,定时到置位,主循环检测标志执行任务。
系统时基轮询:用millis()等获取当前时间,与起始时间比较判断延时是否到。
状态机设计:按时间阶段切状态,各状态处理对应逻辑。
事件驱动:延时作为事件,时间到触发回调函数。
多任务调度:RTOS 中用任务延时函数,调度器切换任务。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1031

主题

3946

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部