시리얼 통신에 관한 질문 간단한 소스 입니다...봐주세요....ㅜㅡ
글쓴이: leo~~~~ / 작성시간: 목, 2006/02/02 - 6:55오후
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> #include <signal.h> #include <time.h> #define BAUDRATE B115200 #define MODEMDEVICE "/dev/ttyS0" #define _POSIX_SOURCE 1 #define FALSE 0 #define TRUE 1 int data[6000], p=0, x=0; void timer_handler(int signum) { int fd, res, m; struct termios oldtio, newtio; char buf[3]; fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY); tcgetattr(fd, &oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD | CRTSCTS; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); sprintf(buf,"%d\n",data[p]); res = write(fd, buf, (int)strlen(buf)); printf("%s", buf); p++; tcsetattr(fd, TCSANOW, &oldtio); if(x==p){ printf("%d\n",x); exit(0); } } main() { struct sigaction sa; struct itimerval timer; int send, i, t=1, c=0, in, j, s, f, z, interval[80] ; srand(time(NULL)); while(t){ send = rand()%15+60; if(send%2==0){ interval[c]=send; c++; } if(c==80) t=0; } for(i=0;i<80;i++){ in=interval[i]; z=in-10; f=in/2; / 70/2 = 35 for(j=1;j<f;j++){ data[x]=j; x++; } data[x]=f; for(j=f-1;j>=0;j--){ x++; data[x]=j; } for(s=0;s<=75-in;s++){ x++; data[x]=0; } } memset (&sa, 0, sizeof (sa)); / 초기화. sa.sa_handler = &timer_handler; sigaction (SIGVTALRM, &sa, NULL); timer.it_value.tv_sec = 0; timer.it_value.tv_usec = 1; timer.it_interval.tv_sec = 0; timer.it_interval.tv_usec = 1000; setitimer (ITIMER_VIRTUAL, &timer, NULL); while(1); }
시리얼 통신 송신부 인데요...
송신부에서 6000개의 데이터를 만들어서 10ms 마다 하나씩 보드로 보냅니다.
근데 약 1000개 정도 보내면 더이상 받지 못합니다.
수신부 문제인가 생각했는데요.
그래서 수신프로그램은 작동시키지 않고 minicom만 띄운채로 송신프로그램만 실행해봤습니다. 그렇게 하면 minicom 프롬프트에 송신되는 데이터가 찍히자나요. 근데 그렇게 해도 약 1000개정도 데이터가 가면 그 다음부터는 데이터를 받지 못합니다.
그러면 송신쪽 프로그램의 오류인가요??
그래서 이렇게 송신쪽 소스를 올립니다...
어느 부분이 잘못되었는지 가르쳐 주세요...ㅜㅡ
Forums:
음...항상 짝을 찾아서 고민하세요.남자가 있으면, 여자가
음...
항상 짝을 찾아서 고민하세요.
남자가 있으면, 여자가 있고, ...
각설하고..
1) open()이 있으면 close()가 있어야 한다는...
# ulimit -a
해서, 열수 있는 최대파일 수가 1024개로 되어 있다면 아마도 1024번째(또는 이미 열린파일고려시 1024보다 작은 근접수치) 까지 돌고 파일을 열 수 없어서 작업이 원할하지 않을것이라는 얘기입니다.
2) while(1);
이렇게 코딩하면 CPU를 쓸데없이 소모하게됩니다.(특정 운영체제에서는 CPU 100%까지도 가게된다는...
그래서, 애교로 다음과 같이 코딩합니다.
while(1) pause();
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기