硬汉嵌入式论坛

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

[μCOS-III] 如何实现精确延时?

[复制链接]

31

主题

53

回帖

146

积分

初级会员

积分
146
发表于 2016-4-9 13:53:05 | 显示全部楼层 |阅读模式
1.想实现精度1us量级的延时,DelayUs(uint32 nus),systick频率分辨率不够,想法是用stm32一个定时器,
定时器时钟48m,48预分频,初始化定时器后,不启动定时器,如下图:
1.png




延时函数中,设置要延时的数值,然后启动定时器,执行pend函数,如下图:
2.png



在定时器ISR中,发送消息,
3.png



在AppTaskMorseSendTCB任务中需要延时时,调用DelayUs()函数
但是调试不成功,始终阻塞在DelayUs()的pend函数里,其他任务也得不到运行了,
调试许久,不知道问题出在什么地方。


2.初始化定时器时,使能定时器更新中断后,立即会进入定时器的ISR,但是定时器这是并没有使能 啊,不知道什么原因,如下图:
2.png
把上面的红线那句代码移动到DelayUs函数中,也还是始终阻塞在pend函数里,问题出在哪里。?

pend函数单独写成一个子函数后,是不是任何任务都可能调用?
那么isr中post函数就不知道该向哪个任务控制块post信号量了。
但是本例中我只有一个任务调用DelayUs,所以ISR发送信号量的对象是固定的,应该没有问题吧。
为什么会导致阻塞?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2016-4-9 14:07:11 | 显示全部楼层
微妙延迟使用我最新创作的使用时钟周期计数器实现就行,简单好用,阻塞式,精度也好,基本满足我们当前大部分项目了
精度可以考虑进一步优化到更高精度
==========================================================
下载一个V4板子里面的uCOS-III例子:V4-625_uCOS-III实验_uCOS-III+STemWin+FatFS综合
------------
1.png

2.png
回复

使用道具 举报

31

主题

53

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 2016-4-9 14:20:04 | 显示全部楼层
我的初衷是不想用阻塞式的,因为还有其他任务要执行。所以想到在延时开始时,设定计时器,然后就可以pend了,这时候可以执行其他任务,定时结束由中断发消息过来继续执行。
回复

使用道具 举报

31

主题

53

回帖

146

积分

初级会员

积分
146
 楼主| 发表于 2016-4-9 14:24:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:微妙延迟使用我最新创作的使用时钟周期计数器实现就行,简单好用,阻塞式,精度也好,基本满足我们当前大部分项目了
精度可以考虑进一步优化到更高精度
==========================================================
下载一个V4板子里面的uCOS-III例子:V4-625_uCOS-III实验_uCOS- .. (2016-04-09 14:07) 
我要求定时精度是1us,但是延时的时长是ms,s量级的,
所以不能采用阻塞式延时。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2016-4-9 14:33:27 | 显示全部楼层

回 ggafish 的帖子

ggafish:我要求定时精度是1us,但是延时的时长是ms,s量级的,
所以不能采用阻塞式延时。 (2016-04-09 14:24) 
原来如此。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2016-4-9 14:40:45 | 显示全部楼层
参看V4板子的uCOS-III里面的例子,例子名字后面加上()的,注释为中断方式的例子均可,里面有个bsp_timer.C文件了,我们统一配置了硬件定时器TIM2,TIM3,TIM4和TIM5的单次执行模式,单位是us。时间到后在
在定时器中断回调函数里面执行的uCOS的API。
===============
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2016-10-11 09:42:45 | 显示全部楼层
把这个延时函数拷贝到ucos_II上面也可以正确执行吗
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2016-10-11 09:44:13 | 显示全部楼层
修改了时钟节拍是不是要调整呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2016-10-11 10:30:08 | 显示全部楼层

回 songzhaofeng 的帖子

songzhaofeng:修改了时钟节拍是不是要调整呢 (2016-10-11 09:44) 
不需要修改时钟节拍,与时钟节拍无关。

参看V4板子的uCOS-II里面的例子,例子名字后面加上()的,注释为中断方式的例子均可

II和III我们都做了这个支持。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 15:42 , Processed in 0.184155 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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