में सीरियल पोर्ट बाधा सेटिंग IUuntu (सी में लिखे प्रोग्राम में) में एक सीरियल पोर्ट के लिए बाधा सेट करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है। मैंने जांच की है कि सीरियल संचार बिना रुकावट के सही तरीके से काम करता है, इसलिए मैं कुछ गलत सेट कर रहा हूं।लिनक्स
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <errno.h>
#include <termios.h>
void signal_handler_IO (int status); /* definition of signal handler */
int n;
int fd;
int connected;
struct termios termAttr;
struct sigaction saio;
int main(int argc, char *argv[])
{
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open_port: Unable to open /dev/ttyO1\n");
exit(1);
}
saio.sa_handler = signal_handler_IO;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
fcntl(fd, F_SETFL, FNDELAY);
fcntl(fd, F_SETOWN, getpid());
tcgetattr(fd,&termAttr);
baudRate = B115200;
cfsetispeed(&termAttr,B115200);
cfsetospeed(&termAttr,B115200);
termAttr.c_cflag &= ~PARENB;
termAttr.c_cflag &= ~CSTOPB;
termAttr.c_cflag &= ~CSIZE;
termAttr.c_cflag |= CS8;
termAttr.c_cflag |= (CLOCAL | CREAD);
termAttr.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
termAttr.c_iflag &= ~(IXON | IXOFF | IXANY);
termAttr.c_oflag &= ~OPOST;
tcsetattr(fd,TCSANOW,&termAttr);
printf("UART1 configured....\n");
connected = 1;
while(connected == 1){
// some code
}
close(fd);
exit(0);
}
void signal_handler_IO (int status)
{
printf("received data from UART.\n");
}
तो कभी भी समय एक और डिवाइस के लिए कॉन्फ़िगर पोर्ट के माध्यम से एक संदेश भेजने, संदेश "UART से डेटा प्राप्त किया।": कोड पीछा कर रहा है कभी प्रदर्शित नहीं होता है।
इस समस्या को हल करने के लिए कोई सुझाव? साथ ही, सिस्टम धारावाहिक बंदरगाह के साथ बाधा से कैसे संबंधित है ?, मैंने सिग्नल.h के बारे में पढ़ा है लेकिन मुझे इसके लिए कोई जवाब नहीं मिला है। मुझे इस पृष्ठ से बाधा विचार मिला: http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html
किसी भी मदद के लिए अग्रिम धन्यवाद। अग्रिम धन्यवाद।
1) मैं ttyS के प्रारंभिक होने से पहले सिग्नल हैंडलर स्थापित नहीं करूंगा।2) आपको सिग्नल हैंडलर से printf() को कॉल नहीं करना चाहिए; printf() गैर-पुनर्वित्तक है। – wildplasser
उत्तर देने के लिए धन्यवाद, लेकिन आपकी टिप्पणियों के बाद "बाधा" अभी भी काम नहीं करती है। कोई और विचार? – gus