我自己的操作系统内核中的定期RTC中断 我现在正在编程C++中的一个内核。因此,作为内核的基本部分,我在内核中实现了一个中断处理模块,它运行良好。但它不适用于RTC IRQ8中断

我自己的操作系统内核中的定期RTC中断 我现在正在编程C++中的一个内核。因此,作为内核的基本部分,我在内核中实现了一个中断处理模块,它运行良好。但它不适用于RTC IRQ8中断,c++,operating-system,kernel,C++,Operating System,Kernel,这是启用irq的my代码: void IDT::enable_irq(unsigned short x, void (*handler)(), unsigned char control){ current_mask &= ~(1<<x) ; //Zero off the IRQ mask to enable if (x>=8) { current_mask &= ~(1<<2); set_int((x + SLAVE_V

这是启用irq的my代码:

void IDT::enable_irq(unsigned short x, void (*handler)(), unsigned char control){
    current_mask &= ~(1<<x) ;   //Zero off the IRQ mask to enable
if (x>=8)
{
    current_mask &= ~(1<<2);
    set_int((x + SLAVE_VEC - 7),(unsigned long) handler, control);
}
else            //Sets the appropriate interrupt at the same time
{
    set_int((x + MASTER_VEC),(unsigned long) handler, control);
}
outb(PICMI, current_mask & 0xff);
outb(PICSI, (current_mask >> 8) & 0xff);
}
但如果我把它叫做irq8,即RTC,那么它就不起作用了

enable_irq(8,rtcInt,INT_GATE|BITS_32|PRESENT|RING_2);
它给我的错误是:
发生了未处理的中断…

然后,我按照本教程中的说明进行操作:

但我想做的是,我想生成周期性的RTC中断,并在每个中断的屏幕上显示时间。或者我想在每个rtc中断上调用一个特定的func

所以请任何人帮我解决这个问题


谢谢。

您代码中的数学错误

if (x>=8) 
{ 
    current_mask &= ~(1<<2); 
    set_int((x + SLAVE_VEC - 7),(unsigned long) handler, control); 
} 
如果(x>=8)
{ 

当前代码中的数学错误

if (x>=8) 
{ 
    current_mask &= ~(1<<2); 
    set_int((x + SLAVE_VEC - 7),(unsigned long) handler, control); 
} 
如果(x>=8)
{ 

当前_掩码&=~(1基本上,我想做的是,在屏幕上显示每个RTC中断的时间。如何在C++中启用IRQ8并在每个中断上调用特定函数,您可以编辑自己的问题以进行更新。如果这是您自己的操作系统内核,那么您应该知道如何安装一些中断处理程序。或者您的问题是如何为您的硬件执行此操作?然后是至少知道这是什么硬件可能有用。0x70是IRQ8的默认中断,除非您通过编程PIC对其进行了更改(请参阅).什么是
SLAVE_VEC
以及如何初始化PIC?基本上我想做的是,在屏幕上显示每个RTC中断的时间。如何在C++中启用IRQ8并在每个中断上调用特定函数,您可以编辑自己的问题以进行更新。如果这是您自己的操作系统内核,那么您应该知道如何在中安装一些terrupt handler。或者您的问题是如何为您的硬件执行此操作?那么至少了解这是关于什么硬件可能是有用的。0x70是IRQ8的默认中断,除非您通过编程PIC更改了它(请参阅)。什么是
SLAVE_VEC
定义的,以及您如何初始化PIC?
if (x>=8) 
{ 
    current_mask &= ~(1<<2); 
    set_int((x + SLAVE_VEC - 8),(unsigned long) handler, control); 
}