1

在我的学校,我的项目是制作一个控制 LED 灯的简单程序

我的教授说 outp() 在 conio.h 中,我知道 conio.h 不是标准的。

outp() 的例子

//assume that port to be used is 0x378
outp(0x378,1); //making the first LED light

提前致谢

4

3 回答 3

3

/dev/port只要您具有写入权限/dev/port(root 或某些具有写入权限的用户),您就可以在 Linux 的用户空间中通过写入来执行此操作。您可以在 shell 中执行以下操作:

echo -en '\001' | dd of=/dev/port bs=1 count=1 skip=888

(请注意,十进制的 888 是十六进制的 378)。我曾经以这种方式完全在 shell 脚本中为 Linux 编写了一个有效的并行端口驱动程序。(虽然它相当慢!)

您可以在 Linux 中的 C 中执行此操作,如下所示:

f = open("/dev/port", O_WRONLY);
lseek(f, 0x378, SEEK_SET);
write(f, "\01", 1);

显然,添加#include和错误处理。

于 2011-10-03T15:23:37.190 回答
2

你把两件事混为一谈。编译器为操作系统制作程序。你的学校项目为 DOS 编写了一个程序。outp(0x378,1);本质上是一个DOS功能。它写入并行端口。其他操作系统使用其他命令。

GCC 是一个针对多个操作系统的编译器。在每个操作系统上,GCC 将能够使用特定于该系统的头文件。

它通常会更复杂一些。DOS 一次运行一个程序,因此不存在对 port 的争用0x378。几乎所有其他操作系统同时运行更多的程序,所以你首先必须弄清楚谁得到它。

于 2011-10-03T11:53:44.580 回答
2

如何写入并行端口取决于操作系统,而不是编译器。在 Linux 中,您将为并行端口打开适当的设备文件,该文件/dev/lp1位于 PC 硬件上的端口 0x0378。

然后,将MS 文档解释为_outp,我猜您想将值为 1 的单个字节写入并行端口。那只是

FILE *fp = fopen("/dev/lp1", "wb");
// check for errors, including permission denied
putc(1, fp);
于 2011-10-03T11:55:40.507 回答