2011-10-03 30 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和錯誤處理。

相關問題