2013-07-12 364 views
1

我有unsigned int DataBAR并想发送char到串口!write()返回errno 14为什么?

我的代码是:

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); 
} 

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

在C 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);    
} 

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

+1

errno 14 =错误的地址,您如何打开'fd'? –

+0

fd = open(“/ dev/ttyS0”,O_RDWR | O_NOCTTY | O_NDELAY); (“open_port:Unable to open/dev/ttyS0 \ n”);如果(fd == -1){ \t \t perror \t \t exit(1); \t} –

+0

串口配置:tcgetattr(fd,&termAttr); \t // baudRate = B115200;/*不需要*/ \t cfsetispeed(&termAttr,B57600); \t cfsetospeed(&termAttr,B57600); \t termAttr.c_cflag&=〜PARENB; \t termAttr.c_cflag&=〜CSTOPB; \t termAttr.c_cflag&=〜CSIZE; \t termAttr.c_cflag | = CS8; \t termAttr.c_cflag | =(CLOCAL | CREAD); \t termAttr.c_lflag&=〜(ICANON | ECHO | ECHOE | ISIG); \t termAttr.c_iflag&=〜(IXON | IXOFF | IXANY); \t termAttr.c_oflag&=〜OPOST; \t termAttr.c_cc [VMIN] = 3; \t termAttr.c_cc [VTIME] = 5; \t tcsetattr(fd,TCSANOW,&termAttr); –

回答

3

write()int write(int fd, void *buf, int n)所以你不能传递一个整数作为第二个参数。我想你没有包含unistd.h,否则你的代码甚至不应该编译。而是指the man page,并呼吁

write(fd, &DataBAR, 1) 

但要知道,这取决于你的系统的字节序不管你写的最多的还是通过这样做,最不显著字节。更好地将DataBAR定义为char(或将值复制到char c中并使用&c,write()

+1

好吧,OP要发一个'char',所以'n'只会是1(尽管你可能会认为endianness可能会引发一个问题)。 –

+0

@抽出你是对的,我会编辑 –