QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 738|回复: 4

兄弟姐们帮我看看。这个程序错在那里!!

[复制链接]
发表于 2004-8-2 17:29:47 | 显示全部楼层 |阅读模式
#include <stdlib.h>
#include <stdlib.h>
#include <unsisted.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <erro.h>

#define BAUDRATE B19200

char *dev="/dev/ttys1";

void setup_com(int fd){
struct termios options;
tcgetattr(fd, &options);

/* Set the baud rates to 19200..*/
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);  

/* Enable the receiver and set local mode...*/
options.c_cflag |= (CLOCAL | CREAD);

/* Set c_cflag options.*/
options.c_cflag &= ~PARENB;     //无校验
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;     //1个停止位
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;         //8个数据位

/* Set c_iflag input options */
options.c_iflag &=~(IXON | IXOFF | IXANY);
options.c_iflag &=~(INLCR | IGNCR | ICRNL);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);  

/* Set c_oflag output options */
options.c_oflag &= ~OPOST; //RAW数据模式

/* Set the timeout options */
options.c_cc[VMIN] = 10;
options.c_cc[VTIME] = 0;
tcsetattr(fd, TCSANOW, &options); //设置COM参数并立即生效  
}  


int main(int argc, char **argv)
{
        int fd;
        int nread;
        char buff[512];
        char *dev ="/dev/ttyS1";
        fd  = OpenDev(dev);
        if (fd>0)
    set_speed(fd,19200);
        else
                {
                printf("Can't Open Serial Port!\n");
                exit(0);
                }
  
  while(1)
          {
                   while((nread = read(fd,buff,512))>0)
                   {
                      printf("\nLen %d\n",nread);
                      buff[nread+1]='\0';
                      printf("\n%s",buff);
                    }
          }
    //close(fd);
    //exit(0);
}
发表于 2004-8-2 17:40:23 | 显示全部楼层
没有一点注释?别人看你的程序是很累的
回复

使用道具 举报

发表于 2004-8-2 17:41:44 | 显示全部楼层
至少把错误信息贴出来吧?
回复

使用道具 举报

 楼主| 发表于 2004-8-2 17:44:46 | 显示全部楼层
[quote:df748eab48="bigcat00"]至少把错误信息贴出来吧? [/quote]
是的。谢谢了
回复

使用道具 举报

发表于 2004-8-4 13:12:16 | 显示全部楼层
#include <erro.h>  ==> errno.h
#include <unsisted.h>  ==> unistd.h

加两个函数定义
[code:1]
//打开串口
int OpenDev(const char *Dev)
{  int  fd = open( Dev, O_RDWR | O_NOCTTY);
    if ( (-1 == fd) || (-2 == fd) )
    {  /*设置数据位数*/
        perror("Can't Open Serial Port");
        return -1;
    }
    return fd;
}

//设置串口通信速率
//fdtmp  类型 int  打开串口的文件句柄
//speed  类型 int  串口速度
void set_speed(int fdtmp, int speed)
{
  int   i;
  int   status;
  int   tmp;
  struct termios   Opt;

  tmp=tcgetattr(fdtmp, &Opt);

  for(i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++)
  {
    if(speed == name_arr[i])
    {
      //tcflush(fd, TCIOFLUSH);
      cfsetispeed(&Opt, speed_arr[i]);
      cfsetospeed(&Opt, speed_arr[i]);
      Opt.c_cflag |= (CLOCAL | CREAD);
      Opt.c_lflag &=~(ICANON | ECHO | ECHOE | ISIG);  //设置为RAW模式
      Opt.c_oflag &=~OPOST;           //设置为RAW模式
      Opt.c_iflag &=~(IXON | ICRNL);  //通讯中不处理控制字符
      //tcflush(fdtmp,TCIOFLUSH);

      status = tcsetattr(fdtmp, TCSANOW, &Opt);
      if(status != 0)
        perror("tcsetattr fd1");
      return;
    }
    tcflush(fdtmp,TCIOFLUSH);
  }
}

[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 18:07 , Processed in 0.092240 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表