有人可以解释这个函数指针语法吗?

时间:2012-09-10 14:18:59

标签: c dos function-pointers

我已经获得了一些供应商提供的用C编写的驱动程序代码,该代码在DOS(是DOS)上运行以访问硬件。我试图弄清楚这段代码的作用,到目前为止还没有太大的成功。特别是我在理解以下代码时遇到了问题

void (interrupt *oldcan)(void);

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

我猜第一行定义了一个函数指针,但我从未见过我假设的interrupt字是某种DOS API函数。我之前从未使用过DOS,上面的函数定义告诉我它有3种返回类型 - voidinterruptfar这显然是不可能的。该函数实际上具有void返回类型,但interrupt far ??的含义是什么?我们将非常感激地提供任何帮助。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

查看链接http://www.phanderson.com/printer/periodic_interrupt.html。该链接讨论了与代码示例一起使用的中断 - 请注意它非常简短。

您还可以查看此帖子:What is the difference between far pointers and near pointers?,了解有关far关键字的信息。