- 积分
- 96
贡献68
飞刀4 FD
注册时间2011-11-22
在线时间61 小时
扫一扫,手机访问本帖
|
自己写的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中是调用正确的啊?
有没有遇到同样问题的,指点一二。
小弟不才,请教一下大家。 |
|