串口中断我做,仿造例子可就是没有消息呀!我用系统本身的驱动,程序运行后检查中断的确注册上了。但在程序中就是没有收到消息!各位帮忙看看吧!
#define BAUDRATE B38400 
#define MODEMDEVICE "/dev/ttyS1" 
#define _POSIX_SOURCE 1 /* POSIX 系统相容 */ 
#define FALSE 0 
#define TRUE 1 
volatile int STOP=FALSE;
void signal_handler_IO (int status);   /* 定义讯号处理程序 */ 
int wait_flag=TRUE;                    /* 没收到讯号的话就会是 TRUE */ 
main() 
{ 
  int fd,c, res; 
  struct termios oldtio,newtio; 
  struct sigaction saio;           /* definition of signal action */ 
  char buf[255]; 
  /* 开启装置为 non-blocking (读取功能会马上结束返回) */ 
  fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); 
  if (fd <0) {perror(MODEMDEVICE); exit(-1); } 
  /* 在使装置非同步化前, 安装讯号处理程序 */ 
  saio.sa_handler = signal_handler_IO; 
 // saio.sa_mask = 0; //这句没加上,因为一加上就编译错误
  saio.sa_flags = 0; 
  saio.sa_restorer = NULL; 
  sigaction(SIGIO,&saio,NULL); 
   
  /* 允许行程去接收 SIGIO 讯号*/ 
  fcntl(fd, F_SETOWN, getpid()); 
  /* 使档案ake the file descriptor 非同步 (使用手册上说只有 O_APPEND 及 
  O_NONBLOCK, 而 F_SETFL 也可以用...) */ 
  fcntl(fd, F_SETFL, FASYNC); 
  tcgetattr(fd,&oldtio); /* 储存目前的序列埠设定值 */ 
  /* 设定新的序列埠为标准输入程序 */ 
  newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; 
  newtio.c_iflag = IGNPAR | ICRNL; 
  newtio.c_oflag = 0; 
  newtio.c_lflag = ICANON; 
  newtio.c_cc[VMIN]=1; 
  newtio.c_cc[VTIME]=0; 
  tcflush(fd, TCIFLUSH); 
  tcsetattr(fd,TCSANOW,&newtio); 
  
  /* 等待输入讯号的回圈. 很多有用的事我们将在这做 */  
  while (STOP==FALSE) { 
    printf(".\n");usleep(100000); 
    /* 在收到 SIGIO 後, wait_flag = FALSE, 输入讯号存在则可以被读取 */ 
    if (wait_flag==FALSE) {  
      res = read(fd,buf,255); 
      buf[res]=0; 
      printf(":%s:%d\n", buf, res); 
      if (res==1) STOP=TRUE; /* 如果只输入 CR 则停止回圈 */ 
      wait_flag = TRUE;      /* 等待新的输入讯号 */ 
    } 
  } 
  /* 回存旧的序列埠设定值 */ 
  tcsetattr(fd,TCSANOW,&oldtio); 
} 
/*************************************************************************** 
* 讯号处理程序. 设定 wait_flag 为 FALSE, 以使上述的回圈能接收字元          * 
***************************************************************************/ 
void signal_handler_IO (int status) 
{ 
  printf("received SIGIO signal.\n"); 
  wait_flag = FALSE; 
} 

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

