打印
[MM32硬件]

任务延时问题

[复制链接]
2289|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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)

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

使用特权

评论回复
沙发
jf101| | 2025-3-31 23:09 | 只看该作者
最后不要实用阻塞模式

使用特权

评论回复
板凳
蚊子的噩梦| | 2025-4-9 11:51 | 只看该作者
了解,HAL_Delay(ms)确实适用于简单的应用场景

使用特权

评论回复
地板
dongnanxibei| | 2025-4-23 19:57 | 只看该作者
感觉arduino里的延时函数很好用,不知道如何实现的

使用特权

评论回复
5
申小林一号| | 2025-4-24 17:59 | 只看该作者
学习一下

使用特权

评论回复
6
申小林一号| | 2025-4-24 18:00 | 只看该作者
学习一下

使用特权

评论回复
7
l1uyn9b| | 2025-5-9 11:15 | 只看该作者
阻塞式延时原理:CPU主动等待,通过空循环或定时器中断实现。

使用特权

评论回复
8
cen9ce| | 2025-5-9 12:24 | 只看该作者
实现简单,但会阻塞CPU,导致资源浪费。延时精度受系统时钟和编译器优化影响。适用场景多为简单任务,对实时性要求不高。无需多任务并发

使用特权

评论回复
9
w2nme1ai7| | 2025-5-9 13:27 | 只看该作者
非阻塞式延时适用于多任务并发,实时性要求高

使用特权

评论回复
10
t1ngus4| | 2025-5-9 14:36 | 只看该作者
得看你需求,如果用操作系统的话,一般用非阻塞延时的

使用特权

评论回复
11
b5z1giu| | 2025-5-9 16:13 | 只看该作者
一般来说,非阻塞延时比较好用,其是基于定时器或系统滴答时钟(SysTick),通过状态机或事件触发实现。

使用特权

评论回复
12
lamanius| | 2025-5-9 17:25 | 只看该作者
我知道的是非阻塞延时在延时期间CPU可执行其他任务,资源利用率高。

使用特权

评论回复
13
kaif2n9j| | 2025-5-10 07:35 | 只看该作者
一般非阻塞延时需配合操作系统(如RTOS)或定时器中断。

使用特权

评论回复
14
d1ng2x| | 2025-5-10 12:15 | 只看该作者
阻塞式延时精度低,受系统负载和编译器优化影响。非阻塞式延时需结合高精度时钟源(如HSE)。

使用特权

评论回复
15
lix1yr| | 2025-5-10 13:21 | 只看该作者
资源占用不一样的,阻塞式延时浪费CPU资源,可能导致其他任务延迟。非阻塞式延时需合理分配定时器资源。

使用特权

评论回复
16
suw12q| | 2025-5-10 15:38 | 只看该作者
功耗的话,长时间阻塞式延时可能导致CPU持续运行,增加功耗。硬件定时器可配合低功耗模式,降低功耗。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

563

帖子

1

粉丝