|
小弟乃正宗LINUX菜鸟一只,现在用嵌入式linux开发ARM9串口通讯。由于实时性强,不能用read一直查询串口(太占资源);由于是菜鸟,不会用中断直接读取寄存器。搜资料时看见大名顶顶的经典文章-Linux Serial Programming HOWTO ,里面的第三种方法-非同步式输入使用的是SIGIO信号,符合我的要求,但我用不好使,即进不到信号处理函数。请各位高手赐教。其关于信号部分的代码如下:
struct sigaction saio; /* definition of signal action */
/* 在使装置非同步化前, 安装讯号处理程序 */
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);
void signal_handler_IO (int status)
{
printf("received SIGIO signal.\n");
}
请问以上程序有问题吗?使用三根线的串口线(2-3,3-2,5-5)有问题吗?使用该程序(我指接收SIGIO信号)用对termios结构体做什么设置吗?另外如果我是在线程中实现该程序用fcntl(fd, F_SETOWN, getpid())可以吗?
敬请赐教,不胜感激! |
|