从键盘获取输入

键盘驱动

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

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

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

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

环形输入缓冲区

实现

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

生产者消费者问题

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


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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 键盘中有2套码,通码和断码,分别对应某个键按下和弹起产生的状态。当键盘上发生按键操作的时候,键盘中的键盘编码器会将...
    今天不想掉头发阅读 2,435评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,059评论 0 4
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 12,976评论 0 13
  • 刘瑜姐姐曾经写过文章,说一个人要活的像一支军队。按照这个标准,我简直就已经活的像个装甲师团。按照在家里面的排行,不...
    生如如花阅读 2,990评论 0 0
  • 今天是什么日子:周二 起床:8:00 就寝:23:00 天气:晴 心情:好 纪念日:无 任务清单 昨日完成的任务,...
    59173阅读 955评论 0 1