读书笔记《30天自制操作系统》day07
来源:互联网 发布:淘宝号查询 编辑:程序博客网 时间:2024/05/17 20:33
1. 在中断处理程序中负责显示不恰当,应该产生中断后把中断数据取出来放到FIFO中去。
2. 当键盘产生中断后后中断处理程序应该向PIC的OCW2发出0x60+IRQ号码的out指令,说明在中断处理程序中已经知道这个事件了,接着发出in指令从0x0060寄存器读取键盘按键产生的信息,该键盘信息保存到FIFO缓冲区中。
#define PORT_KEYDATA 0x0060struct FIFO8 keyfifo;void inthandler21(int* esp){ unsigned char data; io_out8(PIC0_OCW2,0x61); data=io_in8(PORT_KEYDATA); fifo8_put(&keyfifo,data); return ;}
3. 主程序在没事干的时候,看缓冲区有无数据,有则取出显示,没有则执行HLT指令,循环
/* in MariMain*/char s[40],mcursor[256],keybuf[32];fifo8_init(&keyfifo,32,keybuf);for(;;){ io_cli(); if(fifo8_status(&keyfifo)==0) { io_stihlt(); } else { i=fifo8_get(&keyfifo); io_sti(); /*显示i值*/ }}
4. FIFO缓冲区,能有效处理Ctrl键的问题
struct FIFO8{ unsigned char* buf; int p,q,size,free,flags;};#define FLAGS_OVERRUN0x0001void fifo8_init(struct FIFO8 *fifo, int size, unsigned char *buf){fifo->size = size;fifo->buf = buf;fifo->free = size; fifo->flags = 0;fifo->p = 0; fifo->q = 0; return;}int fifo8_put(struct FIFO8 *fifo, unsigned char data){if (fifo->free == 0) {fifo->flags |= FLAGS_OVERRUN;return -1;}fifo->buf[fifo->p] = data;fifo->p++;if (fifo->p == fifo->size) {fifo->p = 0;}fifo->free--;return 0;}int fifo8_get(struct FIFO8 *fifo){int data;if (fifo->free == fifo->size) {return -1;}data = fifo->buf[fifo->q];fifo->q++;if (fifo->q == fifo->size) {fifo->q = 0;}fifo->free++;return data;}int fifo8_status(struct FIFO8 *fifo){return fifo->size - fifo->free;}
- 读书笔记《30天自制操作系统》day07
- 读书笔记《30天自制操作系统》day07
- 读书笔记《30天自制操作系统》day01
- 读书笔记《30天自制操作系统》day02
- 读书笔记《30天自制操作系统》day03
- 读书笔记《30天自制操作系统》day04
- 读书笔记《30天自制操作系统》day05
- 读书笔记《30天自制操作系统》day06
- 读书笔记《30天自制操作系统》day08
- 读书笔记《30天自制操作系统》day09
- 读书笔记《30天自制操作系统》day10
- 读书笔记《30天自制操作系统》day11
- 读书笔记《30天自制操作系统》day01
- 读书笔记《30天自制操作系统》day02
- 读书笔记《30天自制操作系统》day03
- 读书笔记《30天自制操作系统》day12~day13
- 读书笔记《30天自制操作系统》day01
- 读书笔记《30天自制操作系统》day02
- .net中水晶报表使用
- 【Android游戏开发之九】(细节处理)触屏事件中的Bug解决方案以及禁止横屏和竖屏切换!
- windows 添加应用程序到服务
- ios开发学习--文字视图(Text)效果源码分享--系列教程
- linux 中断与时钟
- 读书笔记《30天自制操作系统》day07
- struts2教程:12、自定义类型转换器
- C 算法精介----链表(1)
- 用大数加法模板计算很大的斐波那契数列
- java高新技术(二)
- lamp环境的配置
- 使用centos linux-2.6.32-220.23.1.el6源码编译时出现的问题及其解决方法
- 10大最毒的路边小吃
- 浅谈VB6中的自定义类的使用