查看所有文章链接:(更新中)深入浅出操作系统 - 目录

1. 问题

  • 内核对按键事件进行编码后,如何处理?

1.1 内核策略

缓存 最近的N次按键编码,通过 系统调用 的方式将按键编码提供给任务

1.2 编码缓冲区设计

在内核中可通过 循环缓冲区 存储键位编码
– 为什么是循环缓冲区? ==> 因为缓存的是最近的N次按键编码

74 - 键盘驱动程序的完善-LMLPHP

1.3 设计思想

  • 内核中保留最近N(N=8)次键盘输入的编码结果:
    • 缓冲区未满
      • 编码结果存入缓冲区尾部(tail)
    • 缓冲区已满
      • 舍弃缓冲区头部(head)的编码
      • 编码结果存入缓冲区尾部(tail)

1.4 循环缓冲区保存编码结果

74 - 键盘驱动程序的完善-LMLPHP

1.5 获取编码结果

74 - 键盘驱动程序的完善-LMLPHP

1.6 编程实验:键位编码存储与获取

【参看链接】:74 - 键盘驱动程序的完善 / 00

74 - 键盘驱动程序的完善-LMLPHP

1.7 Pause键的处理(Key Code:0x13)

  • 收到的扫描码为0xE1时,标志着Pause键被按下
  • Pause键从按下到释放的完整扫描为:
    • 0xE1,0x1D,0x45,0xE1,0x9D,0xC5
  • 处理思路:重新映射扫描码
    • 按下:0xE1,0x1D,0x45 ==> 0x5E
    • 释放:0xE1,0x9D,0xC5 ==> 0xDE

74 - 键盘驱动程序的完善-LMLPHP

1.8 编程实验:Pause键的处理

【参看链接】:74 - 键盘驱动程序的完善 / 01Pause键的处理

74 - 键盘驱动程序的完善-LMLPHP

1.9 思考

驱动键盘之后能做什么?

03-29 10:22