OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 150|回复: 8

UCOSIll条件判断中嵌套延时再判断

[复制链接]

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
发表于 2017-10-30 13:00:34 来自手机 | 显示全部楼层 |阅读模式
正点原子公众号
近来才学uCOs,手上一个感应无线上水小项目,在编写感应器感应程序时,因为要感应器感应器到有水低电平延时几分钟后再次判断是否为低电平,类似于按键防抖功能,试用了系统的OStimeDly函数和另一个延时函数一直没达到想要的效果,因为延时函数会进行任务切换,所以运行时感觉没延时一样,现不知该处理这问题,上锁和临界保护都不理想,难道要用定时器才行吗?求高手指点
来自: 微社区
回复

使用道具 举报

  离线 

8

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2017-7-6
在线时间
78 小时
发表于 2017-10-30 14:47:55 | 显示全部楼层
OStimeDly()延时N个时钟节拍,OSTimeDlyHMSM()延时具体的时、分、秒、毫秒,延时期间该任务挂在延时链表OSTickListDly,每个systick中断来时都会检测OSTickListDly中最快要到时的任务是否已经延时完,如果是就进入就绪队列。你所说感觉没延时是个啥情况,你没弄明白的话仿真下看下调用OStimeDly()前后,延时的时间是否准确
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
 楼主| 发表于 2017-10-30 21:21:36 来自手机 | 显示全部楼层
就是判断条件为真时没进入延时函数再判断就直接执行里面的语句了
来自: 微社区
回复 支持 反对

使用道具 举报

  离线 

8

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2017-7-6
在线时间
78 小时
发表于 2017-10-31 09:00:33 | 显示全部楼层
你把代码贴出来吧,你光说我也不清楚啥情况
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
 楼主| 发表于 2017-11-1 23:13:23 来自手机 | 显示全部楼层
语句是先是-带返回值的了函数,if读取感应器的状态返回不同值,然后在数据发送函数里Case:,在if里先判断只能Return返回一个值,不能在中间加延时再判断感应器状态然后返回另一值,这样会报错!如果根据返回值在Case里加延时再判断或启用定时器再判断同样报错!郁闷!今天忘了附代码,明天再贴上
来自: 微社区
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
 楼主| 发表于 2017-11-2 10:20:01 来自手机 | 显示全部楼层
如图:不能在Case或If里加延时或定时器
来自: 微社区
IMG_20171102_081117.jpg
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
 楼主| 发表于 2017-11-2 12:50:13 来自手机 | 显示全部楼层
关键函数
来自: 微社区
1509598175945.jpg
回复 支持 反对

使用道具 举报

  离线 

8

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2017-7-6
在线时间
78 小时
发表于 2017-11-2 17:21:52 | 显示全部楼层
你在switch(){}调用的延时函数有啥问题?
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

Rank: 1

积分
34
金钱
34
注册时间
2017-10-30
在线时间
5 小时
 楼主| 发表于 2017-11-2 19:17:04 来自手机 | 显示全部楼层
1547674987 发表于 2017-11-2 17:21
你在switch(){}调用的延时函数有啥问题?

加延时再条件判断或加定时器在回调里做判断都不行,现在想起来应该是不行的,程序循环死在case那里了,只要返回值没改变!所以我今天用另一个方法去实现了
来自: 微社区
回复 支持 反对

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-20 21:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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