2011-10-03 69 views
1

在我的学校我的项目是做一个简单的程序,控制LED灯gcc编译器中的outp()对应部分是什么?

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

例如(

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

在此先感谢

+0

LED灯是什么?在什么平台上? –

+0

我的意思是将一盏LED灯连接到我的电脑的并行端口。 – nmepntgrm

+0

啊哈。哪个平台? –

回答

2

如何写入并行端口依赖操作系统,而不是编译器上。在Linux中,您可以打开适合您的并行端口的设备文件,该文件在PC硬件上为/dev/lp1,端口号为0x0378。

然后,解释MS docs for _outp,我想你要与值1到并行端口写一个字节。这只是

FILE *fp = fopen("/dev/lp1", "wb"); 
// check for errors, including permission denied 
putc(1, fp); 
+0

1有一个引脚编号。1假设为pin 1 – nmepntgrm

+0

@nmepntgrm:如果你的'outp'函数与MS文档不匹配,那么你可以询问它的作者是如何实现的。 –

+0

它匹配谢谢你。现在我只需要阅读一些文件。 – nmepntgrm

2

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

GCC是一个编译器,定位到多个操作系统。在每个操作系统上,GCC将能够使用特定系统顶部的头文件。

它通常将是更复杂一点。 DOS一次运行一个程序,所以没有端口0x378的争用。关于其他所有操作系统都会同时运行更多的程序,因此您首先必须弄清楚谁能得到它。

+0

OUTP()函数制作的第一个32位版本的Windows(98/95(太在NT,2000和更高版本的Windows,他们被禁止直接存储器存取完全的http:// www.beyondlogic.org/是一个很好的网站,可以让那些对这些东西和旧端口硬件感兴趣的人使用。例如,他们有一个驱动程序,可以在Windows XP以后的版本中使用outp()。因为我尝试过了,但是效果很好,我在XP机器上用并行端口做了一个圣诞节灯光闪光灯LED显示, – Lundin

3

你可以,只要你有写权限/dev/port(root或具有写权限某些用户)写/dev/port从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和错误处理。

相关问题