嵌入式爱好者

查看: 9290|回复: 2

Qt中调用ioctl失败

[复制链接]

8

主题

40

帖子

96

积分

扫一扫,手机访问本帖
发表于 2012-6-14 16:55:35 | 显示全部楼层 |阅读模式
自己写的motor_drv.c驱动,在用c写的测试程序中ioctl()调用成功,并且控制正常,于是用Qt开发应用程序,在初始化的时候调用::ioctl(),但是返回-1,失败了,难道qt中调用::ioctl()函数和在int main()程序中不一样吗?
这是motor_cmd.h

#ifndef _MOTOR_CMD_H
#define _MOTOR_CMD_H

#include <linux/ioctl.h>

#define MOTOR_MAGIC 'x'        //define magic
#define MOTOR_MAX_NR 8        //define the maxim number

#define MOTOR_FORWARD         _IO(MOTOR_MAGIC, 1)
#define MOTOR_BACK              _IO(MOTOR_MAGIC, 2)
#define MOTOR_BRAKE          _IO(MOTOR_MAGIC, 3)
#define MOTOR_ORIGIN_LEFT   _IO(MOTOR_MAGIC, 4)
#define MOTOR_ORIGIN_RIGHT  _IO(MOTOR_MAGIC, 5)
#define MOTOR_TURN_LEFT     _IO(MOTOR_MAGIC, 6)
#define MOTOR_TURN_RIGHT    _IO(MOTOR_MAGIC, 7)
#define MOTOR_STOP            _IO(MOTOR_MAGIC, 8)

#endif        /*_MOTOR_CMD_H*/

这是test.c(测试程序)
#include <stdio.h>
#include<string.h>
#include <sys/types.h>  
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <netinet/in.h>

#include "motor_cmd.h"
int  main(void)
{
    int fd_pwm;
    int fd_dirc;
    int ret;
    fd_dirc = open("/dev/motor", O_RDWR);
    fd_pwm = open("/dev/motor_pwm", O_RDWR);
    if((fd_dirc < 0) && (fd_pwm < 0))
    {
        printf("Open /dev/motor error\n");
            return -1;
    }
    ret = ioctl(fd_pwm, 0, 300);
    printf("ret=%d\n", ret);
    ret = ioctl(fd_dirc, MOTOR_FORWARD);
    printf("ret=%d", ret);
    close(fd_dirc);
    close(fd_pwm);
}
以上运行正常,而我在Qt中开发的时候,在构造函数里初始化
if(::ioctl(fd_pwm, 0, 300)){
        printf("ioctl pwm failed\n");
        return ;
    }
设备节点打开正常,但一到::ioctl()就错误了,返回的值为-1,可在test.c中是调用正确的啊?
有没有遇到同样问题的,指点一二。

小弟不才,请教一下大家。
回复

使用道具 举报

8

主题

40

帖子

96

积分

 楼主| 发表于 2012-6-15 12:22:57 | 显示全部楼层
谢谢大家,自己解决了
回复 支持 反对

使用道具 举报

699682 该用户已被删除
发表于 2012-6-18 12:55:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-24 21:52

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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