시리얼 통신에 관한 질문 간단한 소스 입니다...봐주세요....ㅜㅡ
글쓴이: 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. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기