| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 【操作系统】30天自制操作系统--(6)FIFO缓冲区与鼠标控制 -> 正文阅读 |
|
[系统运维]【操作系统】30天自制操作系统--(6)FIFO缓冲区与鼠标控制 |
? ? ? ? 上一章的最后,实现了键盘的中断反馈,但是鼠标依然没有反应,所以承上启下,本章要做这么几个事情,(1)将中断接收到的数据,拿到中断外面来处理,以减少中断中的操作,加快程序运行(这边很好理解,不再赘述);(2)建立FIFO缓冲区,以便快速稳定地读写键盘/鼠标的活动数据;(3)键盘控制电路的初始化,并激活鼠标,应用建立的FIFO缓冲区读写鼠标的活动数据; 一 建立FIFO缓冲区????????缓冲区是一个队列结构,先进先出,队列长度可以在初始化中自行定义。这边主要构建了以下几个操作函数: 【1】FIFO缓冲区初始化----fifo8_init: ? ? ? ? 这个函数用于初始化一个缓冲区结构体,缓冲区的读写采用双指针的控制方法,所以这边用p、q两个指针来指代缓冲区数组下标。长度可以根据情况自行定义(键盘操作少一点,定义的长度为32,鼠标的操作多一点,定义的长度为128):
【2】FIFO缓冲区写数据----fifo8_put:
【3】FIFO缓冲区读数据----fifo8_get:
【4】FIFO缓冲区状态查询----fifo8_status:
? ? ? ? 有了上面的几个FIFO操作函数,就可以在主函数以及中断处分别添加读、写操作: ? ? ? ? 中断处写FIFO:
? ? ? ? 主函数处读FIFO:
二 鼠标控制????????上一章的最后,实现了键盘的中断反馈,但是鼠标依然没有反应,原因在于,主板上虽然做了鼠标用的电路,但只要不执行激活鼠标的指令,就不产生鼠标的中断信号。 ? ? ? ? 鼠标的使用包含两个部分,一个是控制电路的激活,第二个是鼠标操作符的接收。 ????????【1】鼠标的控制电路包含在键盘的控制电路中,鼠标的激活需要键盘控制电路的初始化:
? ? ? ? 【2】鼠标操作符的接收: ? ? ? ? 与键盘操作相比,鼠标这部分区别不大。区别在于中断中的处理(这边为了方便对比,把键盘的处理也一并贴出来): ? ? ? ? 键盘的处理如下:
? ? ? ? 鼠标的处理如下:
? ? ? ? 由上面可以看出,键盘因为是IRQ1中断,只需要通知一次PIC0即可。然而鼠标是IRQ12中断,IRQ12是由PIC1控制,而PIC1是由PIC0上的IRQ2控制,所以这边需要分别通知: ? ? ? ? ?主函数中的处理与键盘没有区别,所以这边不再赘述(设定的键盘缓冲区是32,鼠标缓冲区是128)。 ? ? ? ? 至此,鼠标和键盘的初始化、激活以及操作符的反馈已经完成。 ? ? ? ? 但是目前鼠标的操作符返回的东西看不懂,还不能实际使用,对其的解读下一章会介绍。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 21:28:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |