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

首先,按下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");
	}	
}

猜你喜欢

转载自blog.csdn.net/weixin_42557786/article/details/109826144