硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1476|回复: 5
收起左侧

[FreeRTOS] 关于RTOS中使用裸机的Delay函数的疑问

[复制链接]

5

主题

19

回帖

34

积分

新手上路

积分
34
发表于 2024-10-30 21:08:02 | 显示全部楼层 |阅读模式
本帖最后由 zeroly 于 2024-10-30 21:11 编辑

请教一下RTOS任务中是不是不能用Delay_ms这类延迟函数?自己用了感觉有不少问题:

1. 任务中同时使用Delay_ms和RTOS的vTaskDelay函数,最终结果是循环只进行了一次: Snipaste_2024-10-30_20-43-22.png
2. 另外感觉Delay函数(不是RTOS的任务延迟)会让任务调度出现一些问题(自己将OLED任务改为简单的printf测试,任务调度是没问题),比如当两个任务优先级相同的时候: Snipaste_2024-10-30_20-54-34.png
当优先级不同: Snipaste_2024-10-30_20-58-15.png
对这些情况比较迷惑,问一下大佬们其中的原因,谢谢。

回复

使用道具 举报

5

主题

19

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-10-30 22:22:57 | 显示全部楼层
了解了一下,是因为Delay函数里面有重置SysTick计数值,而SysTick计数值又被RTOS用作任务调度时基,产生了冲突导致一些奇怪问题么?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-31 08:29:30 | 显示全部楼层
1、可以调用,合理封装就行,我这里分享的例子就可以调用我们的bsp_DelayMS

RTX5全家桶源码综合模板发布V3.0,含FreeRTOS内核版本,将其打造成直接面向实际项目应用的综合框架(2024-10-30)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=124516

2、这个现象也不正常,只要你封装的没问题,可以正常执行的。唯一要注意的是这个是是阻塞式的,执行期间,比这个优先级低的任务无法再运行。
回复

使用道具 举报

3

主题

13

回帖

22

积分

新手上路

积分
22
发表于 2024-10-31 11:44:36 | 显示全部楼层
你delay_ms的时基用的是systick, rtos的时基用的也是systick。这样用一定会出问题。最好把delay_ms的时基换成一个不用的定时器。
回复

使用道具 举报

5

主题

19

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-10-31 21:21:00 | 显示全部楼层
eric2013 发表于 2024-10-31 08:29
1、可以调用,合理封装就行,我这里分享的例子就可以调用我们的bsp_DelayMS

RTX5全家桶源码综合模板发布 ...

谢谢回复,已知使用了dwt里的延迟,没有问题了
回复

使用道具 举报

5

主题

19

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-10-31 21:23:18 | 显示全部楼层
Icathia_7 发表于 2024-10-31 11:44
你delay_ms的时基用的是systick, rtos的时基用的也是systick。这样用一定会出问题。最好把delay_ms的时基换 ...

好,谢谢解答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-26 04:42 , Processed in 0.273455 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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