使用Rust开发操作系统(使用中断,时钟中断,键盘驱动)

使用中断,时钟中断,键盘驱动定义一个中断处理函数定义中断向量时钟中断关于时钟中断键盘中断下一步要做什么在上一篇文章中我们讲述了如何定义一个异常处理函数以及如何向IDT注册异常处理函数,在本篇中我们开始定义一个中断处理函数以及启用我们的中断处理函数定义一个中断处理函数定义一个中断函数很简单,函数的签名与异常处理函数的签名一致,只不过中断处理函数是不需要错误返回码的定义一个基本中断处理函数如下...
摘要由CSDN通过智能技术生成

上一篇文章中我们讲述了如何定义一个异常处理函数以及如何向IDT注册异常处理函数,在本篇中我们开始定义一个中断处理函数以及启用我们的中断处理函数

定义一个中断处理函数

定义一个中断函数很简单,函数的签名与异常处理函数的签名一致,只不过中断处理函数是不需要错误返回码的
定义一个基本中断处理函数如下

use system::Mutex;
use system::ia_32e::cpu::ChainedPics;
...
pub static PICS: Mutex<ChainedPics> = Mutex::new(unsafe { ChainedPics::new(PIC_MAIN, PIC_SLAVE) });
...
extern "x86-interrupt" fn example_interrupt(_stackframe: &mut InterruptStackFrame) {
...
}

很简单不是吗,相比于异常处理函数,中断处理函数除了函数名不同以外还需要做一些额外的工作,还记得我们的PIC嘛?我们初始化一直冷落它,现在是它该发挥作用的时候了具体请查看使用Rust开发操作系统(可编程中断控制器(PIC)8259A)
我们把之前的PIC图拿过来
NMI&INTR

定义中断向量

我们编写中断属于硬件中断,主要是通过8259A来完成,不属于软件中断,注册中断时我们需要提供中断向量号,那么注册IRQ时钟中断时向量号为多少呢,向量号可以自定义的~那么给多少合适呢,我们需要看一看下表

Vector Mne-monic Description Type Error Code Source
0 #DE Divide Error Fault No DIV and IDIV instructions.
1 #DB Debug Exception Fault/ Trap No Instruction, data, and I/O breakpoints; single-step; and others.
2 NMI Interrupt Interrupt No Nonmaskable external interrupt.
3 #BP Breakpoint Trap No INT3 instruction.
4 #OF Overflow Trap No INTO instruction.
5 #BR BOUND Range Exceeded Fault No BOUND instruction.
6 #UD Invalid Opcode (Undefined Opcode) Fault No UD instruction or reserved opcode.
7 #NM Device Not Available (No MathCoprocessor) Fault No Floating-point or W
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值