mat*_*975 3 c function-pointers dos
我得到了一些供应商提供的用 C 编写的驱动程序代码,这些代码在 DOS(是 DOS)上运行以访问硬件。我正在尝试弄清楚这段代码的作用,到目前为止还没有取得太大的成功。特别是我在理解以下代码时遇到问题
void (interrupt *oldcan)(void);
void interrupt far can_isr(void)
{
/* function body */
}
Run Code Online (Sandbox Code Playgroud)
我猜第一行定义了一个函数指针,但我从未见过interrupt我假设是某种 DOS API 函数的词。我从来没有使用过DOS,和上面的外观给我的函数的定义,它有3种返回类型- void,interrupt并且far这显然是不可能的。函数其实有void返回类型,但是什么意思interrupt far??任何帮助将不胜感激。
中断关键字是(曾)用于创建中断处理程序——即,该函数旨在由中断调用。far意味着当它返回时,它期望 CS 和 IP 都在堆栈上(对于通过中断调用的任何内容都是给定的)。
最常见的用途可能是用于将要使用串行端口的代码——BIOS/DOS 串行端口处理程序会在更高的速度下丢失字符(最初大约为 300 bps),因此您必须安装自己的处理程序. 当串行端口上出现字符时,串行端口硬件会断言中断处理器的线路。基于此,您的中断处理程序将被调用。您的代码需要从串行端口将数据读入内存(并执行一些诸如重新启用中断之类的操作)并返回。