시리얼통신에서의 질문 드립니다..

cdcmp의 이미지

안녕하세요..

시리얼 확장기로 시리얼 통신을 하고 있습니다..

tx버퍼로 어떤 문자열을 날리면 rx 버퍼에서 그걸 읽고 파일로 출력하는 프

로그램인데요..

그런데 파일을 출력해보면 아무런 데이터도 출력이 되지를 않습니다..

이와 비슷한 질문을 저번에 드렸었거든요..

그러나 제가 코드를 바꿔서 다시 해보니까 결과가 같아서...

코드는 다음과 같습니다...

#include <stdio.h>
#include <fcntl.h>
#include <termios.h>

char BUFF[10] = "abcdefghij";

char *dev[8] = {"/dev/ttyMP0","/dev/ttyMP1","/dev/ttyMP2","/dev/ttyMP3","/dev/ttyMP4","/dev/ttyMP5","/dev/ttyMP6",
		"/dev/ttyMP7",};

void main(void)
{
	int fd[8];
	int i,j,no;
	
	struct termios term;
	char *buf[4096];

	printf("\nEnter the number of card to test(1~4)");
	scanf("%d",&no);	

	for(i=0;i<no*8;i++)
	{
		if((fd[i] = open(dev[i],O_RDWR|O_NONBLOCK))<0)
		{
    			printf("file open error\n");
		}

		tcgetattr(fd[i],&term);
               term.c_cflag=(CS8+B57600+CREAD+CLOCAL+HUPCL);

		term.c_lflag &= ~ECHO;

		tcsetattr(fd[i],TCSANOW,&term);
	}
		while(1)
		{
  			for(i=0;i<no*8;i++)
			{ 
				write(fd[i],BUFF,8);
   		       read(fd[i],buf,sizeof(buf));
	     	       printf("%s\n",buf);
			}
		} 
}

제가 사용하는 시리얼 확장기는 시리얼포트가 ttyMP0~ttyMP7까지 잡혀있

습니다..

BUFF의 abcdefghij 의 문자열을 시리얼 포트의 rx핀과 tx핀을 연결하여 tx

에서 보낸 abcdefghij 이라는 문자열을 바로 rx의 buf에서 읽어 오도록 하였

습니다..

그런데 buf의 값을 출력해보면 아무런 데이터가 없어서요...

전에 어떤 분께서 가르쳐 주신 ttyS0와 ttyS1 두개를 사용해서 해보기도 했

는데...결과가 똑같았습니다..

read하는 부분에서 잘못 됐는지...알수가 없네요....

고수님들의 답변 부탁드리겠습니다...^^

수고하세요...

saxboy의 이미지

NONBLOCK을 빼고, read의 리턴값과 errno 를 체크해보세요. 지금은 NONBLOCK이 문제인 것 같군요.

cdcmp의 이미지

NONBLOCK을 빼니까 동작을 하지 않네요....

그리고 read의 리턴 값을 보니까 -1이 나오던데...

이 -1이 어떤 값을 의미 하는지....모르겠네요...

너무 초보라서....이해가 안가는 부분이 많아서요....

답변 감사합니다...^^

newmania의 이미지

제가 사용하고 있는 세팅입니다. flow control 사용하지 않고 TX/RX 만 사용합니다.
멀티포트 장비들은 RTS/DTE 등등의 핀들을 처리해야만 동작할 가능성이 큽니다.
일단 테스트 해보시지요. 이상 허접이었습니다. ^^;

fd = open(/dev/ttyS0, O_RDWR | O_NOCTTY | O_NONBLOCK); 
bzero(&newtio, sizeof(newtio)); 
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR; 
newtio.c_oflag |= OPOST;
newtio.c_oflag |= ONLCR;
newtio.c_lflag = 0; 
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
tcsetattr(fd,TCSANOW,&newtio); 

익명 사용자의 이미지

write 하는 부분은 어디 있죠?
그리고 터미날에서
cat /dev/ttyMP0
또 하나의 다른 터미날에서
echo 'a' > /dev/ttyMP0
이렇게 해서 먼저 하드웨어적인 검증 을 하고 된다면 그다음에 코드에대한
검증을 해보세요..
얼핏 보기에는 리드를 먼저 하고 있는 상황에서 라이트를 해야 데이타를 읽어 들일 수 있는데, 순서가 맞지 않는 듯 합니다.

cdcmp의 이미지

손님께서 가르켜 주신 방법으로 먼저 하드웨어 검증을 하였습니다...

cat /dev/ttyMP0

또다른 창에서 echo 'a' > /dev/ttyMP0 하니까 다른 창에서 a라는 문자를

출력 하네요...그렇다면 하드웨어적으로 검증은 된거 같은데요..

그렇다면 프로그래밍 문제인가..??

답변 감사드립니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.