主题 : 关于按键驱动测试程序的 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3843
精华: 0
发帖: 3
金钱: 30 两
威望: 30 点
综合积分: 6 分
注册时间: 2009-02-12
最后登录: 2009-05-04
楼主  发表于: 2009-04-26 19:56

 关于按键驱动测试程序的

麻烦各位大侠帮帮忙,我写了个按键的驱动,然后编了个测试程序,但,测试程序有问题,代码如下:
int main( void )
{
    while( 1 )
    {
        int fp = open( "/dev/button_m", O_RDWR );
        char number;
        fd_set rds;
        int ret;

        FD_ZERO(&rds);
        FD_SET(fp, &rds);

        /*使用系统调用select检查是否能够从/dev/buttons设备读取数据*/
        ret = select(fp + 1, &rds, NULL, NULL, NULL);
        
        /*读取出错则退出程序*/
        if (ret < 0) {
            perror("select");
            exit(1);
        }
        
        if (ret == 0) {
            printf("Timeout.\n");
        }
        /*能够读取到数据*/
        else if (FD_ISSET(fp, &rds))
            read( fp, &number, 1 );

        printf( "button 0x%c is pressed~~\n", number );
        close( fp );
    }
    return 0;
}
我一定要每一次按键之前都要open文件,然后又要close,如果不这样做的话,按了一次键之后,以后的按键就没有反应了。
打开文件不是只要进行一次就行了吗?我本来一位这样写的:
int main( void )
{
    int fp = open( "/dev/button_m", O_RDWR );
    char number;
    while( 1 )
    {
        fd_set rds;
        int ret;

        FD_ZERO(&rds);
        FD_SET(fp, &rds);

        /*使用系统调用select检查是否能够从/dev/buttons设备读取数据*/
        ret = select(fp + 1, &rds, NULL, NULL, NULL);
        
        /*读取出错则退出程序*/
        if (ret < 0) {
            perror("select");
            exit(1);
        }
        
        if (ret == 0) {
            printf("Timeout.\n");
        }
        /*能够读取到数据*/
        else if (FD_ISSET(fp, &rds))
            read( fp, &number, 1 );

        printf( "button 0x%c is pressed~~\n", number );
    }

    close( fp );
    return 0;
}

但是这样写就不行了,为什么呢?
级别: 新手上路
UID: 5367
精华: 0
发帖: 7
金钱: 70 两
威望: 70 点
综合积分: 14 分
注册时间: 2009-04-20
最后登录: 2009-05-29
1楼  发表于: 2009-04-28 14:17
read 后文件偏移变了,所以读不到.