OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

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

查看: 1513|回复: 7

FreeRTOS获取时钟节拍数的问题

[复制链接]

  离线 

13

主题

28

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-9-26
在线时间
23 小时
发表于 2018-1-5 12:07:07 | 显示全部楼层 |阅读模式
1金钱
我写了个程序想通过xTaskGetTickCount()函数来获得按键被按下去的时间长度,程序很简单:
       if(Key_Scan(KEY1_GPIO_PORT,KEY1_PIN)==KEY_ON)
        {
            timeflag=xTaskGetTickCount();
            printf("flag=%d",timeflag);
            while(Key_Scan(KEY1_GPIO_PORT,KEY1_PIN)!=KEY_OFF);
            //timenow=xTaskGetTickCount();
            printf("timenow=%d",timenow);
        }
但是不管我把按键按下去多久两次获取的时钟节拍数要么一样要么后来的比之前的只大1,是我对xTaskGetTickCount()函数的使用出问题了吗


回复

使用道具 举报

  离线 

13

主题

28

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-9-26
在线时间
23 小时
 楼主| 发表于 2018-1-5 12:09:26 | 显示全部楼层
timenow那里没被注释掉 打错了 。。。。。
回复

使用道具 举报

  离线 

12

主题

274

帖子

1

精华

高级会员

Rank: 4

积分
938
金钱
938
注册时间
2017-4-14
在线时间
367 小时
发表于 2018-1-5 12:50:25 | 显示全部楼层
是不是按键有抖动,if里面第一句加一个延时试试,还有按键状态是不是只有KEY_ON KEY_OFF 要不是 就把while里面换成 ==KEY_ON  
回复

使用道具 举报

  离线 

13

主题

28

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-9-26
在线时间
23 小时
 楼主| 发表于 2018-1-5 12:55:17 | 显示全部楼层
275891381 发表于 2018-1-5 12:50
是不是按键有抖动,if里面第一句加一个延时试试,还有按键状态是不是只有KEY_ON KEY_OFF 要不是 就把while ...

看现象不像是按键抖动的问题,因为只有我把按键松开之后,才会输出timenow的值
回复

使用道具 举报

  离线 

489

主题

9万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
124984
金钱
124984
注册时间
2010-12-1
在线时间
1053 小时
发表于 2018-1-6 01:22:35 | 显示全部楼层
正点原子公众号
帮顶
回复

使用道具 举报

  离线 

13

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2015-12-19
在线时间
307 小时
发表于 2018-1-6 17:23:40 | 显示全部楼层
按键被按下,执行if语句,假设按键一直被按下,排除抖动的情况,那么while条件为真,抬起后,打印now,
现象应该是按下,打印flag,抬起打印now,由于按下按键,if的条件为真,while的条件也为真,会执行后面的;(分号语句)
猜测楼主的语句逻辑有点问题,是不是把;分号语句去掉,就可以实现楼主想要的效果了。可以一试。
可能效果不是很明显,由于抖动的问题。
回复

使用道具 举报

  离线 

12

主题

274

帖子

1

精华

高级会员

Rank: 4

积分
938
金钱
938
注册时间
2017-4-14
在线时间
367 小时
发表于 2018-1-6 19:21:59 | 显示全部楼层
shiqinghai 发表于 2018-1-6 17:23
按键被按下,执行if语句,假设按键一直被按下,排除抖动的情况,那么while条件为真,抬起后,打印now,
现 ...

好像也不是,他while里面是!=KEY_OFF 其实就是==KEY_ON 不知道为啥非!=KEY_OFF,估计是别的原因
回复

使用道具 举报

  离线 

13

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
金钱
452
注册时间
2015-12-19
在线时间
307 小时
发表于 2018-1-6 20:56:40 | 显示全部楼层
275891381 发表于 2018-1-6 19:21
好像也不是,他while里面是!=KEY_OFF 其实就是==KEY_ON 不知道为啥非!=KEY_OFF,估计是别的原因

真测Tick的话,还不如搞个定时器来测呢,按键的抖动问题,不好整,得上示波器来看,毕竟要测某个东西,手里得有一个准确的东西,不然为啥用砝码测重量呢?
回复

使用道具 举报

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

本版积分规则




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

GMT+8, 2018-4-25 00:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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