프로그램작성중 C언어 구문오류같은데 잘모르겠습니다.ㅜㅠ

simram의 이미지

간단하게 시리얼포트를 통해 머터를 제어하는 프로그램을 짜고 있습니다.
그런데 리눅스에서 사용자함수를 만들어서 사용하려고 하면

38라인 two or more data types in declaration of 'serial_open_init'
In function 'main':
86라인 invalid operands to binary ==
at top level:
115라인 conflicting types for 'serial_open_init'
38라인 previous declaration of 'serial_open_init'

이런 에러메시지가 뜹니다.

데체 이게 무슨 뜻인지.... 전 함수 정의를 잘했다고 생각했는데 어디가 문제인지 잘모르겠습니다.

도와주세요~~~~~ㅜㅠ

아래코드는 제가 작성한코드이구요... 좀.. 깁니다...
따로 두개 함수로 할때는 잘되었었거든요...
많아서 이런건지..... ㅜㅠ

커널버전은 2.4.13 이고 gcc 버전은 2.96입니다.......

흑흑흑....

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <sys/types.h>

#define _POSIX_SOURCE 1
#define TRUE 1
#define FALSE 0

#define MODEMDEVICE1 "/dev/ttyS0"
#define MODEMDEVICE2 "/dev/ttyS1"

#define BAUDRATE7 B115200

int fd; //파일 디스크립터 저장장소
char MODEMDEVICE[11]="/dev/ttyS0";
char baudrate[10][8]={"B2400","B4800","B9600","B19200","B38400","B57600","B115200","B230400","B307200","B460800"};
unsigned char motdata[4]={0xff,0x00,0x00,0x00};
//unsigned char setdata[6]={0xff,0x00,0x00,0x00,0x00,0x00};
unsigned char buf[3]={0,};
struct termios oldtio,newtio;
struct sigaction saio;

struct motor{ //모터 정보 가지고 있는 구조체
int m_id; //id
char m_baudrate[10]; //시리얼 통신속도
int m_resolution; //모터 해상도
int m_over_current; //모터 과전류 제어범위
int m_pgain; //p제어이득
int m_dgain; //g제어이득
}

//void motor_scan(int *fds, struct motor *ms);
//int motor_setting(int *fd);
int serial_open_init(int *fd, struct motor *m);
int read_data(int *fd);
int write_data(int *fd, unsigned char data[]);
void signal_handler_IO(int status);
unsigned char packit_make_35(int a, int b);
unsigned char packit_make_44(int a, int b);
int power_down(int *fd);

int main(void)
{
int c,i,j;
int x,y,z;
int *fdp; //파일 디스크립터 저장장소에 접근할수 있는 포인터
struct motor *mp; //motor에 대한 포인터 변수
i=TRUE;

mp=(struct motor *)malloc(sizeof(mp)); //m변수에 할당된 공간의 주소 넣어줌

while(i) //종료 문자 들어올때까지 반복
{
printf("This is AL-MOTOR TOOL!!!\n");
printf("Choice : (1)Motor environment SCAN (2)Motor environment Setting (3)Exit\n");
scanf("%d",&c);

switch(c) //함수 분기
{
case(1):
x=TRUE;
while(x)
{
printf("Motor scan \n");
printf("Com Port Choice : (1)COM1 (2)COM2 (3)Exit\n");
scanf("%d",&y);

switch(y)
{
case(1):
strcpy(MODEMDEVICE, "/dev/ttyS0");
break;
case(2):
strcpy(MODEMDEVICE, "/dev/ttyS1");
break;
case(3):
x=FALSE;
break;
}
if(x!=3)
{
if(serial_open_init(fdp,mp) == TRUE)
printf("scan OK!!!\n");
else printf("scan ERROR\n");
printf("scan ERROR!!!\n");
}
}
//motor_scan(fdp,mp); //연결된 모터 정보 스캔하기
break;
case(2):
printf("motor setting\n"); //연결된 모터 정보 새로 쓰기
break;
case(3):
i=FALSE;
break;
}
}
printf("Exit program\n");
if(*fdp>0) close(*fdp);
free(mp);
return (FALSE);
}

/*int motor_setting(int *fd)
{
printf("motor setting\n");
return (TRUE);
}*/

int serial_open_init(int *fd, struct motor *m)
{
int i,j;
*fd=open(MODEMDEVICE, O_RDWR|O_NOCTTY|O_NONBLOCK);
if(*fd<0)
{
perror(MODEMDEVICE);
return(FALSE);
}else{
saio.sa_handler=signal_handler_IO;
sigemptyset(&saio.sa_mask);
saio.sa_flags=0;
saio.sa_restorer=NULL;
sigaction(SIGIO,&saio,NULL);

fcntl(*fd,F_SETOWN,getpid());
fcntl(*fd,F_SETFL,FASYNC);
tcgetattr(*fd,&oldtio);

newtio.c_cflag=BAUDRATE7|CS8|CLOCAL|CREAD;
newtio.c_iflag=IGNPAR|ICRNL;
newtio.c_oflag=OPOST;
newtio.c_lflag=0;
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=1;

tcflush(*fd,TCIFLUSH);
tcsetattr(*fd,TCSANOW,&newtio);
//return(TRUE);
}
i=0;

while(i<10) //모터속도 찾기.
{
if(power_down(fd)==TRUE)
{
m->m_id=(int)buf[0];
strcpy(m->m_baudrate,baudrate[i]);
printf("connected success!!!\n");
break;
}else if(i==9){
printf("connected failure.\n");
printf("serial port cacking plese.\n");
}else{
i++;
cfsetspeed(&newtio, *baudrate[i]);
tcsetattr(*fd,TCSANOW,&newtio);
}
}

printf("motor ID = %c motor baudrate = %c\n",m->m_id,m->m_baudrate);
}

int read_data(int *fd)
{
int res;
res=read(*fd,buf,sizeof(buf));
buf[res]=0;
if(res>0) return(TRUE);
else return(FALSE);
}

int write_data(int *fd,unsigned char data[])
{
int res;
res=write(*fd,(unsigned char *)data,sizeof(data));
if(res>0)
{
printf("%d %x %x %x %x \n",res,data[0],data[1],data[2],data[3]);
return (TRUE);
}else{
printf("not printf %d\n",res);
return (FALSE);
}
}

void signal_handler_IO(int status)
{
printf("Received SIGIO signal.\n");
}

unsigned char packit_make_35(int a, int b)
{
unsigned char rechar;
rechar=(char)((a*2)*16)^(char)(b);
return(rechar);
}

unsigned char packit_make_44(int a, int b)
{
unsigned char rechar;
rechar=(char)(a*16)^(char)(b);
return (rechar);
}

int power_down(int *fd)
{
motdata[0]=0xff;
motdata[1]=packit_make_35(6,31);
motdata[2]=packit_make_44(2,1);
motdata[3]=(motdata[1]^motdata[2])&0x7f;

write_data(fd,motdata);
if(read_data(fd)==TRUE) return (TRUE);
else return(FALSE);
}

moonzoo의 이미지

struct motor{ //모터 정보 가지고 있는 구조체 
int m_id; //id 
char m_baudrate[10]; //시리얼 통신속도 
int m_resolution; //모터 해상도 
int m_over_current; //모터 과전류 제어범위 
int m_pgain; //p제어이득 
int m_dgain; //g제어이득 
} 

맨 마지막 라인의

} 끝에 ; 이 빠졌군요

vness의 이미지

다른 분이 먼저 답변을 달으셨네요.

소스를 자세히 잘펴보진 않았지만.. 눈에 띄는 몇몇 에러들이 있군요.

컴파일은 잘 되겠지만 fdp, mp 등의 쓰임도 잘못된 듯 싶습니다.

simram의 이미지

엄청난 실수를 했네요.....^^;;;;;

정말 기초적인 실수를 저질렀네요...

정말 민망한...ㅋㅋ

답글 달아주셔서 감사합니다.

오늘 하루도 무사히~~^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.