主题 : 求救: micro2440开发板在Qt下open按键失败 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
楼主  发表于: 2013-05-28 10:52

 求救: micro2440开发板在Qt下open按键失败

在Qt下面open按键,总是提示open失败。我在dev下面看到有buttons设备啊,而且cat时也是有反应的。
在Qt下面如果我换成open(pwm,0),就成功。不知道为什么啊。
源码如下:
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QWSServer>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <qapplication.h>
#include <qmessagebox.h>
#include <qsocketnotifier.h>

int m_fd;
QSocketNotifier *m_notifier;
bool m_oldButtonsState[8];

mainWidget::mainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::mainWidget)
{
    ui->setupUi(this);

    set_dialog = NULL;

    connect(ui->setButton, SIGNAL(clicked()), this, SLOT(on_setButton_clicked()));

    m_fd = ::open("/dev/buttons", 0);
    if (m_fd < 0)
    {
        QMessageBox::information(this, "Error", "Fail to open /dev/buttons.");
        return;
    }
    memset(m_oldButtonsState, 0, sizeof m_oldButtonsState);

    m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
}

mainWidget::~mainWidget()
{
    delete ui;
    ::close(m_fd);
}

void mainWidget::on_setButton_clicked()
{
    if (set_dialog == NULL)
        set_dialog = new setDialog(this);

//    QWSServer::setCursorVisible(false); //hide the cursor
//    set_dialog->setWindowFlags(Qt::FramelessWindowHint);
    set_dialog->show();
}
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
1楼  发表于: 2013-05-28 14:26
我用友善提供的按键测试程序测试也是好的,为什么我在Qt下面open会失败呢?
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
2楼  发表于: 2013-05-28 15:08
刚刚试着在button的驱动中的open函数里面加入了打印语句,发现时申请中断发生错误导致open时返回-1,所以open失败。

可是为什么用友善提供的测试程序就OK呢?都是一样的open啊?应该是没有问题的啊?而且在Qt下面对pwm操作是正常的,pwm的open函数也是有request_irq操作啊?两者的区别只是使用的中断不一样
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
3楼  发表于: 2013-05-28 15:35
继续在驱动中加入打印语句,发现request_irq返回的错误码是-EBUSY,表示中断已经被占用且不能共享。

友善提供的内核在启动时会占用按键的中断或者开始使用按键了?
级别: 侠客
UID: 90672
精华: 0
发帖: 71
金钱: 355 两
威望: 71 点
综合积分: 142 分
注册时间: 2013-04-22
最后登录: 2013-10-27
4楼  发表于: 2013-05-28 16:05
display.zip (326 K) 下载次数:1

附件是我的整个源码,只是两个简单的窗口,现在想把按键加进去,可是碰到open失败的问题。

哪位高手帮我看看,问题在哪啊,谢谢?

我是在linux下用Create2.7.0和友善提供的QTE4.6.3环境下开发的。