[MM32硬件] 任务延时问题

[复制链接]
 楼主| 发表于 2025-3-30 01:15 | 显示全部楼层 |阅读模式
ic, TI, ck, ST, os, RT
确认延时方式:

HAL_Delay(ms): 适用于裸机、简单应用,但会阻塞任务。

osDelay(ms) / vTaskDelay(ms): 适用于 RTOS,但需确保 SysTick 配置正确。

xTaskGetTickCount() / micros():用来检查任务实际执行间隔,判断延时是否符合预期。

✅ 调试代码(检查任务延时):

c
复制
编辑
TickType_t start = xTaskGetTickCount();
vTaskDelay(1000);
TickType_t end = xTaskGetTickCount();
printf("Delay time: %lu ms\n", end - start);
如果任务延时不准确,可能的原因:

时钟源异常

任务优先级问题(高优先级任务占用 CPU)

其他任务/中断导致的抢占

发表于 2025-3-31 23:09 | 显示全部楼层
最后不要实用阻塞模式
发表于 2025-4-9 11:51 | 显示全部楼层
了解,HAL_Delay(ms)确实适用于简单的应用场景
发表于 2025-4-23 19:57 | 显示全部楼层
感觉arduino里的延时函数很好用,不知道如何实现的
发表于 2025-4-24 17:59 | 显示全部楼层
学习一下
发表于 2025-4-24 18:00 | 显示全部楼层
学习一下
发表于 2025-5-9 11:15 | 显示全部楼层
阻塞式延时原理:CPU主动等待,通过空循环或定时器中断实现。
发表于 2025-5-9 12:24 | 显示全部楼层
实现简单,但会阻塞CPU,导致资源浪费。延时精度受系统时钟和编译器优化影响。适用场景多为简单任务,对实时性要求不高。无需多任务并发
发表于 2025-5-9 13:27 | 显示全部楼层
非阻塞式延时适用于多任务并发,实时性要求高
发表于 2025-5-9 14:36 | 显示全部楼层
得看你需求,如果用操作系统的话,一般用非阻塞延时的
发表于 2025-5-9 16:13 | 显示全部楼层
一般来说,非阻塞延时比较好用,其是基于定时器或系统滴答时钟(SysTick),通过状态机或事件触发实现。
发表于 2025-5-9 17:25 | 显示全部楼层
我知道的是非阻塞延时在延时期间CPU可执行其他任务,资源利用率高。
发表于 2025-5-10 07:35 | 显示全部楼层
一般非阻塞延时需配合操作系统(如RTOS)或定时器中断。
发表于 2025-5-10 12:15 | 显示全部楼层
阻塞式延时精度低,受系统负载和编译器优化影响。非阻塞式延时需结合高精度时钟源(如HSE)。
发表于 2025-5-10 13:21 | 显示全部楼层
资源占用不一样的,阻塞式延时浪费CPU资源,可能导致其他任务延迟。非阻塞式延时需合理分配定时器资源。
发表于 2025-5-10 15:38 | 显示全部楼层
功耗的话,长时间阻塞式延时可能导致CPU持续运行,增加功耗。硬件定时器可配合低功耗模式,降低功耗。
发表于 2025-7-26 16:10 | 显示全部楼层
[color=rgba(0, 0, 0, 0.85)]任务延时需考虑系统时钟精度、中断嵌套影响,避免阻塞式延时,优先用定时器或 RTOS 延时函数,确保任务调度实时性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

563

帖子

1

粉丝
快速回复 返回顶部 返回列表