首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

sigio信号处理函数解决方案

2014-04-18 
sigio信号处理函数为什么SIGIO信号处理函数里面的printf函数在串口没有打印输出?SIGIO信号处理函数确实是

sigio信号处理函数
为什么SIGIO信号处理函数里面的printf函数在串口没有打印输出?

SIGIO信号处理函数确实是执行了,为了验证,特地在信号处理函数里面加了计数器,计数器是在不断增加,可串口看不到prinf打印信息,这是为什么呢?

#include <sys/types.h>   
#include <sys/stat.h>   
#include <fcntl.h>   
#include <stdio.h>   
#include <poll.h>   
#include <signal.h>   
#include <sys/types.h>   
#include <unistd.h>   
#include <fcntl.h>   
  
int fd;  

int vlaue = 0;
  
void my_signal_fun(int signum)//底层驱动发来信号后的信号处理函数  
{  
    vlaue++;
    printf("############# my_signal_fun ################");  
}  
  
int main(int argc, char **argv)  
{  
    unsigned char key_val;  
    int ret;  
    int Oflags;  
  
    signal(SIGIO, my_signal_fun);
      
    fd = open("/dev/higpio", O_RDWR);  
    if (fd < 0)  
    {  
        printf("can't open!\n");  
    }  
  
    fcntl(fd, F_SETOWN, getpid());
    Oflags = fcntl(fd, F_GETFL);
    fcntl(fd, F_SETFL, Oflags | FASYNC);
  
    while(1)
    {
        if(vlaue != 0)
        {
            printf("vlaue = %d\n", vlaue);
        }
        sleep(1);
    }
 
    return 0;  
}  

[解决办法]
signal处理函数内不能用printf族的函数,你可以用创建文件的方式代替。
具体的解释可以在bash中man signal,有解释,还有signal里面支持哪些函数
http://man7.org/linux/man-pages/man7/signal.7.html

热点排行