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

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

[复制链接]
GPTKEY 提问时间: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

查看全部评分

GPTKEY 回答时间: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

查看全部评分

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

评分

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

查看全部评分

GPTKEY 回答时间: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

查看全部评分

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

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

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版