C — управление последовательным портом — код не компилируется

#c #serial-port #compiler-errors

#c #последовательный порт #ошибки компилятора

Вопрос:

Я пытаюсь заставить загореться светодиод, подключенный к последовательному порту. Я следовал пошаговому руководству, которое можно найти здесь. Я точно следовал инструкциям, но не могу заставить код скомпилироваться. Из руководства PDF следует, что это часть 2, которая не компилируется, которую я воспроизводю здесь:

 //<Set serial port parameters>

  DCB dcbSerialParams = {0};
  dcbSerial.DCBlength=sizeof(dcbSerialParams);
  if (!GetCommState(hSerial, amp;dcbSerialParams))
  {
  //error getting state
  }
  dcbSerialParams.BaudRate=CBR_19200;
  dcbSerialParams.ByteSize=8;
  dcbSerialParams.StopBits=ONESTOPBIT;
  dcbSerialParams.Parity=NOPARITY;
  if(!SetCommState(hSerial, amp;dcbSerialParams))
  {
  //error setting serial port state
  }

//</Set serial port parameters>
  

Я включил в код, как указано, но я получаю сообщение об ошибке «`dcbSerial’ необъявленный (сначала используйте эту функцию)». Я использую Dev-C .

По сути, все, что я пытаюсь сделать, это получить команду, которая включает и выключает индикатор, который я могу вставить в другую имеющуюся у меня программу (устройство слежения за глазами — идея в том, чтобы заставить светодиод мигать, когда ваши глаза смотрят на него).

Любая помощь очень ценится.

Ответ №1:

 dcbSerial.DCBlength=sizeof(dcbSerialParams);
  

должно быть:

 dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
  

На самом деле, вам придется приложить немного больше усилий для чтения и понимания сообщений об ошибках компилятора — это было настолько ясно, насколько это возможно.

Ответ №2:

Замените dcbSerial на dcbSerialParams .

Комментарии:

1. Большое спасибо. Должен был заметить это сам — я предполагал, что руководство было бы безупречным! Это очень ново для этого.

Ответ №3:

Вы объявили переменную с именем dcbSerialParams , но ссылаетесь на нее как dcbSerial

 DCB dcbSerialParams = {0};
dcbSerial.DCBlength=sizeof(dcbSerialParams);