2012-09-10 97 views
1

我已经给出了一些供应商提供的驱动程序代码,用C语言编写,在DOS上运行(是DOS)以访问硬件。我正在努力研究此代码的功能,迄今为止没有取得太大的成功。特别是我有问题理解下面的代码有人可以解释这个函数指针语法吗?

void (interrupt *oldcan)(void); 

void interrupt far can_isr(void) 
{ 
    /* function body */ 
} 

我猜,第一行定义一个函数指针,但我从来没有见过的interrupt字我是这样假设是某种DOS API函数。我以前从未使用DOS,上面的函数定义在我看来它有3种返回类型 - void,interruptfar,这显然是不可能的。该函数实际上具有void返回类型,但interrupt far的含义是什么?任何援助将受到感谢。

+0

如果我没有记错,'far'与被调用的函数的内存地址有关,在正常页面之外。 –

回答

4

中断关键字被用于创建中断处理程序 - 即,此函数旨在被中断调用。 far意味着它返回时,它期望CS和IP都在堆栈上(对于通过中断调用的任何东西)。

最常见的用法可能是要使用串口的代码 - BIOS/DOS串口处理程序会在更高的速度下丢失字符(本来约为300 bps),因此您必须安装你自己的处理程序。当一个字符出现在串口上时,串口硬件会断言一条中断处理器的线路。基于此,您的中断处理程序将被调用。您的代码需要将数据从串口读入内存(并执行一些操作,例如重新启用中断)并返回。

+1

呃。我记得FAR指针。 –

+2

+1这就是即使你将自己的个人资料隐藏起来也能说明你年龄的问题之一:) – dasblinkenlight

+0

感谢你的回答,它给了我一个出发点。这种代码不再使用吗?我只在全场比赛5年,但我从未见过这样的事情。 – mathematician1975

1

这很可能是一个编译器特定的扩展,用于以某种平台特定的方式将该函数“安装”为中断处理程序。

标准C语言中没有interrupt关键字。

相关问题