硬汉嵌入式论坛

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

[有问必答] 如何理解按键驱动

[复制链接]

4

主题

5

回帖

4

积分

新手上路

积分
4
发表于 2016-3-18 18:35:59 | 显示全部楼层 |阅读模式
请问大神如何理解以下按键驱动中程序,麻烦解答一下

uint8_t bsp_GetKey(void)
{
    uint8_t ret;

    if (s_tKey.Read == s_tKey.Write)
    {
        return KEY_NONE;
    }
    else
    {
        ret = s_tKey.Buf[s_tKey.Read];

        if (++s_tKey.Read >= KEY_FIFO_SIZE)
        {
            s_tKey.Read = 0;
        }
        return ret;
    }
}
问题:为什么当if(s_tKey.Read == s_tKey.Write) 时要返回空,这句应如何理解?
是表示没有任何按键按下吗?但是为什么没有按键按下时s_tKey.Read == s_tKey.Write?
麻烦大神解答!谢谢[s:152]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2016-3-18 20:53:08 | 显示全部楼层
按键消息的实现就是一个简单FIFO的时候,有消息的时候s_tKey.Write数值加1,读消息的时候s_tKey.Read 数值加一,两个值相等了说明没有消息了。
具体可以看V5开发板用户手册的按键FIFO部分。我们的V4,V5和V6板子的按键实现都是一样的,只有引脚驱动稍有区分。
回复

使用道具 举报

4

主题

5

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2016-3-18 21:49:55 | 显示全部楼层

回 eric2013 的帖子

eric2013:按键消息的实现就是一个简单FIFO的时候,有消息的时候s_tKey.Write数值加1,读消息的时候s_tKey.Read 数值加一,两个值相等了说明没有消息了。
具体可以看V5开发板用户手册的按键FIFO部分。我们的V4,V5和V6板子的按键实现都是一样的,只有引脚驱动稍有区分。

 (2016-03-18 20:53) 
懂了,多谢了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 16:11 , Processed in 0.036810 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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