你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRtos 中 希望一个几百微秒 uS的延时 怎样处理比较好

[复制链接]
50031185 提问时间:2018-6-2 10:20 /
关于200~300uS的延时

1 能否直接读取Rtos的 系统时钟计数器来 实现延时统计,改如何读取呢?
2 通过独立的定时器中断来实现,这样感觉有点麻烦,好处是比较严谨,但是代码稍微复杂
3 直接while 循环倒计时  阻塞等待 ,这个计算出 CPU时钟周期, 然后想延时多久就可以算出来了

哪种方案好,或者 还有什么更好的方案

目的 为了控制IO输出



收藏 评论8 发布时间:2018-6-2 10:20

举报

8个回答
Serval 回答时间:2018-6-2 12:19:58
一般用3就够了,需要注意最好把代码放在RAM上运行,避免某些MCU的Flash Prefetch或Cache造成影响。
用2也可以,就是需要占用一路定时器了。
1的话,应该没法做到。一般FreeRTOS的Tick是10ms左右,没法达到楼主要求的精度。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

50031185 回答时间:2018-6-2 23:27:21
楼上的建议 我又想了一下,直接阻塞计数延时 还不是很好,因为系统的任务调度时间是以ms 为单位的,
那就意味着 阻塞延时器件  执行系统调度的概率非常非常小,几乎可以忽略, 所以这样的延时还是影响了系统的效率, 延时依然在延时,系统没有机会反应过来 去切换执行其他任务

关于第1个 我想的是 读取系统最核心的计数器, 不知如何
feixiang20 回答时间:2018-6-2 23:52:17
【FreeRTOS使用其它定时器(非SysTick滴答定时器)作为系统时钟节拍的.】
【FreeRTOS任务运行时间信息统计】
【RTOS通用仿真环境的设计与实现】
【硬件实时操作系统的设计与实现】
这几个资料里说到启动延时器,停止延时器等功能,可否能用呢,调度内核是系统的核心,负责任务的调度管理;中断管理模块负责管理外部中断;定时器模块负责任务延时和周期执行。Delay_Counter为任务延时计数器。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

toofree 回答时间:2018-6-2 23:59:20
把FreeRtos的基准时间设为200us到300us试试看,不过这样的话,程序会任务切换比较频繁,影响效率。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

50031185 回答时间:2018-6-3 09:26:09
toofree 发表于 2018-6-2 23:59
把FreeRtos的基准时间设为200us到300us试试看,不过这样的话,程序会任务切换比较频繁,影响效率。 ...

这样不太好,  为一个任务的要求就改变了整个系统的时钟,不划算
黑皮男 回答时间:2018-6-3 15:59:15
如果不想影响系统的相应速度,还是用定时器吧。如果其他任务的执行需求没有那么紧迫,也可以使用while这种死等的方式

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

xiaojie0513 回答时间:2018-6-3 22:18:26
感觉2-300us有点快,一般正常FreeRTOS都是10ms或者是1ms的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-6-3 23:24:27
本帖最后由 toofree 于 2018-6-3 23:27 编辑
50031185 发表于 2018-6-3 09:26
这样不太好,  为一个任务的要求就改变了整个系统的时钟,不划算

反正,要想定时,只有两种办法。
要么硬件定时,要么软件定时。
硬件定时器嫌麻烦,RTOS系统软件定时都是以最小节拍时钟为单位的。如果是本任务内,可以用while死等,但是不能有中断事件,否则延时无法保证。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版