按下键盘后,OS怎么做回应?

博客主要讲述Linux系统中键盘中断处理机制。按下按键会触发key press和key release两个中断,会向键盘驱动规定的内存port地址发送两个键盘state。还提出不按键是否一直触发key release中断的疑问,指出键盘驱动只读取按下状态的键,代码逻辑与state首位flag有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,按下key后引发中断,键盘的IRQ #1,会找到处理标号为1 的键盘中断处理函数。

键盘的中断处理函数,无非就是与内存上与PIC连接的port地址进行通信,告诉PIC,这个键盘的中断我CPU已经完成了,可以从你的PIC队列里面delete释放了。

但是,按下一个key却是触发了2个中断,一个是key press,一个是key release,这时候就会往键盘驱动规定的内存port地址中发送2个键盘state,这个state是个字节型数据(00~ff)。
注意:一个按键,对应两个state,对应两个不同的字节数据;比如,a的按键state是0001 0100和1001 0100,其中首尾是flag位,为0表示这个按键是按下状态,为1表示按键是松开状态;

问题来了,那么我一个键都不按,那不就一直触发key release中断了吗?

此时,键盘驱动派上用场了,当中断把键盘state送到驱动的port地址上后,驱动就只读取按下状态的键,也就是为什么要把首位作为flag的原因;代码逻辑如下:
因为按下的键首位为0,所以他们的state值不会超过1000XXXX H

if(key<1000XXXX)
{

	switch (key)
	{
		case 1E :printf("a");
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值