Что такое аналог outp () в компиляторе gcc? - PullRequest
1 голос
/ 03 октября 2011

В моей школе мой проект состоит в том, чтобы создать простую программу, которая управляет светодиодами

мой профессор сказал, что outp () находится в conio.h, и я знаю, что conio.h не является стандартомone.

пример outp ()

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

заранее спасибо

Ответы [ 3 ]

3 голосов
/ 03 октября 2011

Вы можете сделать это из пространства пользователя в Linux, записав в /dev/port, если у вас есть права на запись в /dev/port (root или какой-либо пользователь с разрешениями на запись).Вы можете сделать это в оболочке с помощью:

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

(обратите внимание, что десятичное число 888 - это 378 гекс).Однажды я написал рабочий драйвер параллельного порта для Linux полностью в сценарии оболочки.(Хотя это было довольно медленно!)

Вы можете сделать это в C в Linux следующим образом:

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

Очевидно, добавьте #include и обработку ошибок.

2 голосов
/ 03 октября 2011

Способ записи в параллельный порт зависит от ОС, а не от компилятора.В Linux вы открываете соответствующий файл устройства для вашего параллельного порта, который равен /dev/lp1 на оборудовании ПК для порта 0x0378.

Затем интерпретируйте документы MS для _outpЯ думаю, вы хотите записать один байт со значением 1 в параллельный порт.Это просто

FILE *fp = fopen("/dev/lp1", "wb");
// check for errors, including permission denied
putc(1, fp);
2 голосов
/ 03 октября 2011

Вы смешиваете две вещи. Компилятор создает программы для ОС. Ваш школьный проект сделал программу для DOS. outp(0x378,1); по сути является функцией DOS. Он пишет в параллельный порт. Другие операционные системы используют другие команды.

GCC - это компилятор, предназначенный для нескольких операционных систем. На каждой ОС GCC сможет использовать заголовочные файлы, специфичные для этой системы.

Обычно это будет немного сложнее. DOS запускает одну программу за раз, поэтому нет конкуренции за порт 0x378. На любой другой ОС одновременно запускается гораздо больше программ, поэтому сначала нужно выяснить, кто ее получает.

...