Я пытаюсь записать на параллельный порт в первый раз с помощью драйвера lptDrv vxWorks, но вызов функции write() всегда возвращает -1. Вот код, который я использую:vxWorks Параллельный порт write() Failure
#define PARALLEL_PORT "/lpt/0"
/* Create a device for the parallel port */
lptDevCreate(PARALLEL_PORT,0)
/*open the parallel port*/
parallelPortFD = open(PARALLEL_PORT, O_CREAT|O_WRONLY, 0))
LOCAL UINT32 watchdogBit = 0x01;
if (write(parallelPortFD, (char*) watchdogBit, sizeof(UINT32)) == -1)
{
/* Always hits this block */
}
Оба звонка в lptDevCreate и open return okay. В настоящее время у меня нет аппаратного обеспечения, подключенного к параллельному порту, поэтому это затрудняет тестирование, но я не думаю, что это также вызвало бы сбой записи.
Для получения дополнительной информации какой-то, я был в состоянии назвать lptShow(), но я не уверен, что я смотрю на:
controlReg = 0xff
statusReg = 0xff
created = TRUE
autofeed = TRUE
inservice = FALSE
normalInt = 0
defaultInt = 0
retryCnt = 1
busyWait (loop) = 10000
strobeWait (loop) = 10000
timeout (sec) = 1
intLevel (IRQ) = 7
Какая версия vxWorks, плата и BSP? Это важные элементы при решении аппаратных проблем. Глядя на рутину шоу, не похоже, что вы разговариваете с аппаратом порта, а прерывание не подключено. Вы должны посмотреть исходный код драйвера lpt. – Benoit
vxWorks 6.7 с использованием Intel Core 2 BSP на лесной плате Cook. Я думаю. Я извлекаю свою информацию из кода и не выполняю начальную настройку аппаратного/BSP (и не знаю, как это сделать). Я считаю, что исправил одну проблему. У конфигурации ядра был другой номер порта, чем у BIOS, поэтому я обновил конфигурацию ядра для соответствия. Теперь я вижу «controlReg = 0xe» и «statusReg = 0x78» при выполнении lptShow(). Тем не менее, я все еще получаю сообщение об ошибке при вызове write(). – bjsample