美文网首页
从键盘获取输入

从键盘获取输入

作者: HAPPYers | 来源:发表于2019-12-12 10:44 被阅读0次

    键盘驱动

    • 按键按下时的编码是通码,makecode
    • 按键弹起时的编码是断码,breakcode
      一个键的扫描码由通码和断码组成。

    无论是按下键还是松开键,当键的状态改变的时候,键盘中的8048芯片把按键对应的扫描码(通码或者断码)发送到主板的8042芯片,由8042芯片处理后保存在自己的寄存器中,然后向8042芯片发送中断请求。

    大多数情况下第一套扫描码中的通码和断码都是1字节大小。通码和断码,它们的关系是:断码=0x80 +通码。 顺便说一句, 在第二套键盘扫描码中, 一般的通码是 1 宇节大小,断码是在通码 前再加 1 字节的 0xF0,共2 字节,我们的 8042 工作之一就是根据第二套扫描码中通码和断码的关系将它们解码,然后按照第一套扫描码中通码和断码的关系转换成第一套扫描码。

    • 扫描码有 3 套,现在一般键盘中的 8048 芯片支持的是第二套扫描码。因此每当有击键发生时, 8048 发给 8042 的都是第二套键盘扫描码。
    • 8042 为了兼容性,将接收到的第二套键盘扫描码转换成第一套扫描码。 8042 是按字节来处理的, 每处理一个字节的扫描码后,将其存储到自己的输出缓冲区寄存器。
    • 然后向中断代理 8059A 发中断信号,这样我们的键盘中断处理程序通过读取 8042 的输出缓冲区寄存器,会获得第一套键盘扫描码。

    环形输入缓冲区

    实现

    结构:逻辑上唤醒的循环队列

    生产者消费者问题

    生产者消费者问题是用来描述多个线程协同工作的模型


    有一个或多个生产者、 一个或多个消费者和一个固定大小 的缓冲区,所有生产者和消费者共享这同一个缓冲区。生产者 生产某种类型的数据,每次放一个到缓冲区中,消费者消费这种数据,每次从缓冲区中消费一个。同一时刻,缓冲区只能被一个生产者或消费者使用。当缓冲区已满时,生产者不能继续往缓冲区中添加数据,当缓冲区为空时,消 费者不能在缓冲区中消费数据。

    相关文章

      网友评论

          本文标题:从键盘获取输入

          本文链接:https://www.haomeiwen.com/subject/dndpbqtx.html