如何让用户输入的键盘按键转换为对于的字符,只需使用汇编调用bios中断即可实现,我们在naskfuc.nas中编写好的大量in out接口尝试调用,修改后的int.c中inthandler函数:
我们往键盘上按下一个键的时候,键盘外设会向CPU发送一个外中断,并将按键的区位码发送,我们使用io_in8接口接收返回的缓冲区数据,运行:
按下一个按键,比如a:
我们暂时让按键对应的编码输出了,以后我们再将键盘编码转换为对应的字符。
我们在bookpack.h头文件中声明一个名为KEYBUF的缓冲区,用于存放更多的字符编码:
修改一下int.c中的inthandler函数,使其能不断的读取键盘码,其中next为数组指针:
bookpack.c中主函数HariMain尾部添加读取缓冲区键盘码代码:
这样当键盘连续输入的时候,会不断的刷新显示的按键编码。
上面缓冲区的设计的弊端就是不能存储大量的数据,每次只能读取一个数据。并且每次读取都需要进行一次一位操作,时间复杂度是O(N),我们尝试设计一个O(1)复杂度的读取操作,并且使它能读取更多的数据,修改后bookpack.h中的KEYBUF结构体:
其中定义的data存放数据,下面的三个指针next_r是数据读取指针,next_w是数据写入指针,len是缓冲区已有数据个数。
修改后int.c的inthandler函数对键盘编码的写入:
bookpack.c的HariMain主函数对数据的读取:
这样就不需要频换的进行移位操作。
我们优化后的缓冲区只能读取32个字节,这样后面用到更多读写操作时又需要频换修改,我们将缓冲区的读写独立为一个fifo.c函数。
修改后的结构体:
新增的fifo.c文件:
此时在bookpack.c的HariMain主函数中:
我们使用make run命令运行,按下键盘上任意键:
没有问题。
对鼠标的中断处理跟键盘大致差不多,对于鼠标我们将缓冲区字节大小修改为128字节,修改后的bookpack.c:
这样键盘鼠标的中断我们都处理了,现在尝试运行一下:
我们移动一下鼠标:
今天的内容大致就这么多。
到此这篇boos源空白(sileo bigboss源空白)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/31510.html