26197|35

307

帖子

4

TA的资源

一粒金砂(高级)

楼主
 

怎样使QT程序调用硬件驱动的应用程序 [复制链接]

 
如题:

          把QT的界面应用程序做好了,但是始终只是顶层的应用程序,并没有控制底层硬件的能力(或者说和底层硬件交互的能力)。

  以控制LED为例,在QT中设置了一个按钮,点这个按钮,就能控制开发板上LED的亮和灭。现在是LED的驱动已经加载到了内核中,并且在根文件系统的/usr/bin/  目录下有led这个可执行文件,那么该怎样让QT程序和这个硬件联系起来呢?有人说在QT中用信号和槽的方式,用

connect(button, SIGNAL(clicked()), this, SLOT(????));   可是这个SLOT()的括号里面怎么填我就不清楚了。是这个led可执行文件的路径吗?
此帖出自编程基础论坛

最新回复

为什么楼主的 LED-TEST 文件里没有用户界面?  详情 回复 发表于 2018-5-6 20:14
点赞 关注(1)
 

回复
举报

307

帖子

4

TA的资源

一粒金砂(高级)

推荐
 
这里是我经过各位论坛大神的指点,然后修改调试,最后做出来的程序,供参考。
里面包含了TX2440的LED的驱动,外加我写的QT程序。(本来是用的自己写的驱动,但想了想以后开发方便一些,还是用了开发板自己的驱动)

作为本帖的一个终结吧,问题也解决了,不过里面还藏了一点小小的疑惑在里面,我还要继续看C++的相关的资料去把它搞清楚。

LED_TEST.zip

24.48 KB, 下载次数: 386

本帖的代码

此帖出自编程基础论坛

点评

好的 期待疑惑的解决和继续交流  详情 回复 发表于 2015-7-31 11:34

赞赏

1

查看全部赞赏

 
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

推荐
 
  1. //led.h文件  
  2. #ifndef LED_H  
  3. #define LED_H  
  4. #ifdef __cplusplus  
  5. extern "C" {  
  6. #endif  
  7. extern int led_open(const char *devname);  
  8. extern int led_ioctl(const int no,const int sw);  
  9. extern int led_close(void);  
  10. extern int led_fd;  
  11. #ifdef __cplusplus  
  12. }  
  13. #endif  
  14. #endif // LED_H  
复制代码
  1. //led.c文件  
  2. #include "led.h"  
  3. #include <fcntl.h>  
  4. #include <stdio.h>  
  5. #include <unistd.h>  
  6. #include <string.h>  
  7. #include <stdlib.h>  
  8.   
  9. #define IOCTL_LED_ON    0  
  10. #define IOCTL_LED_OFF   1  
  11.   
  12. int led_fd=0;  
  13. int led_open(const char*devname){  
  14. led_fd=open(devname,O_RDWR);  
  15. printf("LED driver is ok\n");  
  16. if(led_fd<0){  
  17.   printf("open device %s failed.\n",devname);  
  18.   return -1;  
  19. }  
  20. return 0;  
  21. }  
  22. int led_ioctl(const int no,const int sw){  
  23. //led_fd=open("/dev/led",O_RDWR);  
  24. int num=no;  
  25. ioctl(led_fd,sw,num);  
  26. printf("LED%dis open\n",num);  
  27. return 0;  
  28. }  
  29. int led_close(void){  
  30. if(led_fd)  
  31.   close(led_fd);  
  32. }  
复制代码
  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3. #include "led.h"  
  4.   
  5. #define LED1    0  
  6. #define LED2    1  
  7. #define LED3    2  
  8. #define LED4    3  
  9.   
  10. #define LED_ON  0  
  11. #define LED_OFF 1  
  12.   
  13. MainWindow::MainWindow(QWidget *parent) :  
  14.     QMainWindow(parent),  
  15.     ui(new Ui::MainWindow)  
  16. {  
  17.     ui->setupUi(this);  
  18.     led_open("/dev/led");  
  19.     printf("C++ /dev/led\n");  
  20. }  
  21.   
  22. MainWindow::~MainWindow()  
  23. {  
  24.     delete ui;  
  25.     led_close();  
  26. }  
  27.   
  28. void MainWindow::on_pushButton_pressed()  
  29. {  
  30.     led_ioctl(LED1,LED_ON);  
  31. }  
  32.   
  33. void MainWindow::on_pushButton_released()  
  34. {  
  35.     led_ioctl(LED1,LED_OFF);  
  36. }  
复制代码




放一个push button 然后 将鼠标放在pushbutton上面,点击右键,选择转到槽( goto slot。。。)。选择pressed()和 release()按键函数。







这个楼主主要还是参考周立功、天嵌、飞凌这些公司的提供的手册吧,,这个一般讲的还是比较详细的,可以去百度网盘搜一下。。。
要是找不到,可以加我qq(论坛ID),我给你发一些,,
此帖出自编程基础论坛

点评

感谢大神,参考代码然后做了些修改之后,能够在我自己的板子上实现LED的整体亮灭的控制了。 对于QT调用驱动的理解也比一开始茫然无知的时候要清晰多了。  详情 回复 发表于 2015-7-30 10:48

赞赏

1

查看全部赞赏

 
个人签名
分享铸就美好未来。。。




 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

沙发
 
那不是可以调用驱动完成的吗?跟eclipse中进行LED点灯一样吧。
此帖出自编程基础论坛

点评

由于还没有做过用QT调用驱动,所以不清楚到底是怎么个调用法。,版主能说得更详细一些吗  详情 回复 发表于 2015-7-28 08:46
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

板凳
 
lonerzf 发表于 2015-7-28 06:43
那不是可以调用驱动完成的吗?跟eclipse中进行LED点灯一样吧。

由于还没有做过用QT调用驱动,所以不清楚到底是怎么个调用法。,版主能说得更详细一些吗
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

4
 
不要沉啊,成败在此一举了啊。
此帖出自编程基础论坛
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

5
 
可以看看人家郭天祥的2440视频教程。然后跟着人家写个驱动,调用就行。当然,应该还有其他方法。
此帖出自编程基础论坛

点评

就是天祥的板子,可是视频里面根本就没有将怎样用QT应用程序调用底层硬件的驱动。 天祥的这个视频就是觉得——讲一部分,保留一部分。很多问题都是自己后来辛辛苦苦的解决的。  详情 回复 发表于 2015-7-29 00:22
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

6
 
lonerzf 发表于 2015-7-28 21:28
可以看看人家郭天祥的2440视频教程。然后跟着人家写个驱动,调用就行。当然,应该还有其他方法。

就是天祥的板子,可是视频里面根本就没有将怎样用QT应用程序调用底层硬件的驱动。
天祥的这个视频就是觉得——讲一部分,保留一部分。很多问题都是自己后来辛辛苦苦的解决的。

1.png (23.22 KB, 下载次数: 2)

TX2440的视频列表的一部分

TX2440的视频列表的一部分
此帖出自编程基础论坛

点评

后面的添加驱动是吗?其实你目前需要的驱动应该也不会很难吧。先实现读写IO再深入。我好久没弄这个,都忘了好多,我也回头再看看。  详情 回复 发表于 2015-7-29 06:56
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

7
 
郑小气聋子 发表于 2015-7-29 00:22
就是天祥的板子,可是视频里面根本就没有将怎样用QT应用程序调用底层硬件的驱动。
天祥的这个视频就是觉 ...

后面的添加驱动是吗?其实你目前需要的驱动应该也不会很难吧。先实现读写IO再深入。我好久没弄这个,都忘了好多,我也回头再看看。
此帖出自编程基础论坛

点评

驱动什么的都已经有了,问题是在于QT对驱动的调用啊。  详情 回复 发表于 2015-7-29 08:19
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

8
 
lonerzf 发表于 2015-7-29 06:56
后面的添加驱动是吗?其实你目前需要的驱动应该也不会很难吧。先实现读写IO再深入。我好久没弄这个,都忘 ...

驱动什么的都已经有了,问题是在于QT对驱动的调用啊。
此帖出自编程基础论坛
 
 
 

回复

554

帖子

0

TA的资源

版主

9
 
QT也就是C++程序,与普通的C程序没有本质的区别,你直接在按钮的实现里调用就行了,如果你要在QT程序里执行/usr/bin下的命令操作,可以用system()这个函数来调用。更详细的用:man system就可以知道了。
此帖出自编程基础论坛

点评

目测懂了一些,不过赶脚还是要把驱动代码改一改,换成适合用按钮触发的。继续加油  详情 回复 发表于 2015-7-29 23:44
 
个人签名My dreams will go on...
http://www.jyxtec.com
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

10
 
/dev 或 /sys下面找办法。
此帖出自编程基础论坛

点评

正在努力修改中  详情 回复 发表于 2015-7-29 23:45
 
 
 

回复

965

帖子

0

TA的资源

纯净的硅(高级)

11
 
把LED的驱动放到QT里,点按钮后调用开灯灭灯的函数就可以了,我这里有例程,需要的话告诉我邮箱
此帖出自编程基础论坛

点评

哟西,,,实现这个功能了  详情 回复 发表于 2015-7-30 10:49
求教了  详情 回复 发表于 2015-7-29 19:53
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

12
 
石玉 发表于 2015-7-29 16:27
把LED的驱动放到QT里,点按钮后调用开灯灭灯的函数就可以了,我这里有例程,需要的话告诉我邮箱

593690477@qq.com
求教了
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

14
 
spacexplorer 发表于 2015-7-29 10:16
QT也就是C++程序,与普通的C程序没有本质的区别,你直接在按钮的实现里调用就行了,如果你要在QT程序里执行 ...

目测懂了一些,不过赶脚还是要把驱动代码改一改,换成适合用按钮触发的。继续加油
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

15
 
freebsder 发表于 2015-7-29 11:55
/dev 或 /sys下面找办法。

正在努力修改中
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

16
 
574433742 发表于 2015-7-29 20:35
放一个push button 然后 将鼠标放在pushbutton上面,点击右键,选择转到槽( goto slot。。。)。 ...

感谢大神,参考代码然后做了些修改之后,能够在我自己的板子上实现LED的整体亮灭的控制了。
对于QT调用驱动的理解也比一开始茫然无知的时候要清晰多了。
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

17
 
石玉 发表于 2015-7-29 16:27
把LED的驱动放到QT里,点按钮后调用开灯灭灯的函数就可以了,我这里有例程,需要的话告诉我邮箱

哟西,,,实现这个功能了
此帖出自编程基础论坛
 
 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

18
 
在这里,对各位的无私的指导表示感谢(虽然只是口头层面的,但是真的是很感谢各位),我会再接再厉,把自己的技术磨练得更上一层楼。
此帖出自编程基础论坛

点评

有问题多来交流吧,也说说如何实现的。  详情 回复 发表于 2015-7-30 10:58
 
 
 

回复

2万

帖子

74

TA的资源

管理员

19
 
郑小气聋子 发表于 2015-7-30 10:51
在这里,对各位的无私的指导表示感谢(虽然只是口头层面的,但是真的是很感谢各位),我会再接再厉,把自己 ...

有问题多来交流吧,也说说如何实现的。
此帖出自编程基础论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

一下午,继续优化了下程序,刚刚做完。准备把代码贴出来,供和我类似情况的人学习。  详情 回复 发表于 2015-7-30 16:38
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

307

帖子

4

TA的资源

一粒金砂(高级)

20
 
soso 发表于 2015-7-30 10:58
有问题多来交流吧,也说说如何实现的。

一下午,继续优化了下程序,刚刚做完。准备把代码贴出来,供和我类似情况的人学习。
此帖出自编程基础论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表