write() 返回 errno 14 为什么?

Шиј*_*гор 3 c linux serial-port

我有unsigned int DataBAR并想发送char到串口!

我的代码是:

unsigned char Printer_buffer[PRN_BUFFER_SIZE];  
unsigned int DataBAR, DataD, DataT;

for (i = 0; i < 8; i++) {
  SumaN = SumaN + (Printer_buffer[i] & 0x0F);
  DataBAR = (Printer_buffer[i] & 0x0F) + 0x30;
  nbytes = write(fd,DataBAR ,1); //want to send to the serial port 
  printf("write error  code is %d !!!!!!!!!\n", errno);
  if (nbytes != 1) {
    printf("error writing on serial port!!!\n");
  }
  sleep(1);
  SumaP = SumaP + ((Printer_buffer[i] >> 4) & 0x0F);
  DataBAR = ((Printer_buffer[i] >> 4) & 0x0F) + 0x30;
  nbytes = write(fd, DataBAR, 1);
  printf("write error  code is %d !!!!!!!!!\n", errno);
  if (nbytes != 1) {
    printf("error writing on serial port!!!\n");
  }
  sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

write返回errno=14如何解决这个问题?

在 CI 中使用 pic18f 使用此代码并且它正在工作:

for (i=0;i<8;i++){
  SumaN=SumaN+(Printer_buffer[i] & 0x0F);
  DataBAR=(Printer_buffer[i] & 0x0F) + 0x30;
  while(BusyUART1());
  putcUART1(DataBAR);               
  SumaP=SumaP+((Printer_buffer[i]>>4) & 0x0F);
  DataBAR=((Printer_buffer[i]>>4) & 0x0F) + 0x30;
  while(BusyUART1());
  putcUART1(DataBAR);               
}
Run Code Online (Sandbox Code Playgroud)

我现在在这里,感谢您的帮助!!!

Ing*_*rdt 5

write()就是int write( int fd, void *buf, int n )这样,你不能传递一个整数作为第二个参数。我猜你没有包含unistd.h否则你的代码甚至不应该编译。而是参考手册页并调用

write( fd, &DataBAR, 1 )
Run Code Online (Sandbox Code Playgroud)

但请注意,这取决于您系统的字节序,是通过这样做写入最高位还是最低位字节。更好地定义DataBAR为 char (或将值复制到 char 中c并使用&cin write()