linux大作业.docx
- 文档编号:24247590
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:12
- 大小:346.07KB
linux大作业.docx
《linux大作业.docx》由会员分享,可在线阅读,更多相关《linux大作业.docx(12页珍藏版)》请在冰豆网上搜索。
linux大作业
《嵌入式LINUX应用程序开发
期末大作业》
课程名称:
嵌入式Linux应用程序开发
题目:
基于UP-CUP2440平台的驱动程序开发和QT程序开发
专业:
计算机软件
班级:
111
学号&姓名:
8000611036黄江伟
8000610009符涌
8000611111郭杰
8000611027周治安
完成人数:
4人
起讫日期:
2014-05-20
任课教师:
李岚职称:
副教授
摘要
随着嵌入式技术的不断发展,近年来嵌入式技术在国内得到了广泛应用,在消费电子中得到了普及性的应用,而学习嵌入式系统首先要掌握常用嵌入式处理器、嵌入式操作系统、嵌入式编程语言,即ARM处理器、嵌入式Linux系统、嵌入式C语言,有了这些基础就可以进行前入式Linux应用开发、系统开发、驱动开发等的学习。
本次作业是基于UP-CUP2440平台的驱动程序开发和QT程序开发两个部分,前者是对在所给出的硬件平台上,开发驱动程序,实现跑马灯的基本效果;后者是开发一个QT应用程序,这里我们是在QT上实现计算器。
我们在完成的过程中按照老师的要求,计算器实现了在开发板上和虚拟机上双重的演示效果,实现了知识的迁移,也是大学所学内容理论到实践为数不多的应用。
关键词:
linux,QT,跑马灯,计算器。
目录
一、
团队成员
组长:
黄江伟
组员:
符涌、郭杰、周治安。
二、基于UP-CUP2440平台的驱动程序开发
1、实验内容
学习在linux写针对S3C2440的LED驱动程序,实现跑马灯的效果,按下中断按钮后,开发板上的LED灯将会从左到右依次闪亮,然后从右向左依次闪亮,此为一个周期。
LED灯将会周期闪烁。
2、实验原理
UP-CUP2440开发平台设置了 3 个 GPIO控制的 LED,和 1 个可直接产生外部硬件中断的按键。
LED分别使用 S3C2410/S3C2440的 GPC5,GPC6,GPC7(PXA270 的 GPIO0,GPIO1,GPIO52)三个 GPIO,按键接到 INT5 中断(PXA270的 GPIO97)
3、实现过程
在实验八的基础上对代码进行适当的改进,具体实现源代码部分如下所示:
intflag=0;
irqreturn_ts3c2440_IRQ3_fun(intirq,void*dev_id,structpt_regs*reg)
{
flag++;
if(flag==1){
led01_enable();
mdelay(200);
led01_disable();
mdelay(200);
led02_enable();
mdelay(200);
led02_disable();
mdelay(200);
led03_enable();
mdelay(200);
led03_disable();
}
if(flag==3){
led01_enable();
mdelay(200);
led01_disable();
mdelay(200);
led03_enable();
mdelay(200);
led03_disable();
mdelay(200);
led02_enable();
mdelay(200);
led02_disable();
mdelay(200);
}
if(flag==5){
led01_enable();
led03_enable();
led02_enable();
mdelay(600);
}
if(flag==7){
led01_disable();
led03_disable();
led02_disable();
mdelay(600);
flag=0;
}
}
1)在Fedora中进入目录执行make之后生成驱动测试程序,挂载NFS共享目录:
up-tech:
~ # mount -t nfs 192.168.0.6:
/UP-CUP2440 /mnt/nfs/ -o nolock,rsize=4096,wsize=4096
2)进入串口终端的NFS共享试验目录
3)执行编译成功的程序up-tech:
/mnt/nfs/SRC/exp/basic/09_int # insmod s3c2440-int.ko
三、Linux下的QT应用程序科学计算器的实现
1、实验内容
♦在本机宿主机Linux下编译X11环境的QT库
♦在本机宿主机环境下编译和运行一个程序并显示运行结果
♦在Linux下使用QtDesigner设计QT程序界面
♦在QtDesigner下编写程序,在本机上编译并运行
♦搭建Qt/E环境,移植QT/E到UP-CUP2440型设备上
♦在Qt/E中添加触摸屏鼠标等设备支持
♦利用QtDesigner下编写程序,在ARM设备上运行
2、实验原理
QT的事件机制
3、实现过程
♦使用designer
设计界面,添加窗口组件
信号槽连接
编写事件处理函数
保存工程为.ui文件,得到一个主窗口类
♦编写main.cpp文件进行主窗口类的实例化及显示
♦使用qmake生成.pro工程文件qmake-project
♦通过qmake自动生成Makefile文件qmake
♦ake生成可执行文件
♦运行
代码部分实现如下:
voidcalculator:
:
calculateClick(){
//取出计算式
label->clear();
QStringformula=res->text();
if(check(formula)){
formula=count(formula);
if(!
b){
b=true;
res->setText("");
label->setText("Error:
dividedbyzero");
}
else
res->setText(formula);
}
return;
}
QStringcalculator:
:
count(QStringformula){
//先计算括号中的
if(formula.contains(')')){
intlB=0,rB=0,start=0,end=0;
for(inti=0;i if(formula.at(i)=='('){ lB++;//左括号数 if(lB==1) start=i; } if(formula.at(i)==')') rB++;//右括号数 if(lB==rB&&lB! =0){ end=i; QStringtemp=formula.mid(start+1,end-start-1); formula.remove(start,end-start+1); QStringstr=count(temp); if(start>=1){ if(str.at(0)=='-'&&formula.at(start-1)=='+'){ formula.remove(start-1,1); formula.insert(start-1,str); } elseif(str.at(0)=='-'&&formula.at(start-1)=='-'){ formula.remove(start-1,1); str="+"+str.mid (1); formula.insert(start-1,str); } else formula.insert(start,str); } else formula.insert(start,str); returncount(formula); } } } //然后计算乘除 elseif(formula.contains('*')||formula.contains('/')){ intstart=0,end=0,op=0;//运算式开始位,结束位,操作符位 formula="#"+formula+"#"; for(inti=0;i if(op! =0){ if(formula.at(i)=='*'||formula.at(i)=='/' ||formula.at(i)=='+'||formula.at(i)=='-' ||formula.at(i)=='#'){ if(i! =op+1){ end=i; QStringtemp0,temp1,temp2; temp2=formula.mid(op+1,end-op-1); temp1=formula.mid(op,1); temp0=formula.mid(start+1,op-start-1); formula.remove(start+1,end-start-1); QStringstr=count(temp0,temp1,temp2); if(str.at(0)=='-'&&(formula.at(start)=='+'||formula.at(start)=='-')){ str=str.mid (1); formula.insert(start+1,str); if(formula.at(start)=='-'){ formula.remove(start,1); if(start! =1) formula.insert(start,'+'); } } else formula.insert(start+1,str); formula.remove('#'); returncount(formula); } } } if(formula.at(i)=='*'||formula.at(i)=='/') op=i; if(op==0) if(formula.at(i)=='+'||formula.at(i)=='-'||formula.at(i)=='#') start=i; } } //再计算加减 elseif(formula.contains('+')||formula.mid (1).contains('-')){ intop=0,start=0,end=0;//操作符的位置,以及算术式的结束位 formula=formula+"#"; //第一个字符可能是负号,从第二个字符开始看 for(inti=1;i if(formula.at(i)=='+'||formula.at(i)=='-'||formula.at(i)=='#'){ op++; if(op==1)start=i; if(op==2){ end=i; QStringtemp0,temp1,temp2; temp2=formula.mid(start+1,end-start-1); temp1=formula.mid(start,1); temp0=formula.mid(0,start); formula.remove(0,end); formula.remove('#'); formula.insert(0,count(temp0,temp1,temp2)); returncount(formula); } } } } //单个操作数直接返回 returnformula; } 4、演示效果: 科学计算器在Fedora上的演示 科学计算器在开发板上的演示 四、心得体会 经过两个多周的不懈努力,在全组人员的不断争论和探究中,我们基本上不打折扣的完成了老师布置的任务,实现了基于UP-CUP2440平台的驱动程序开发,实现了跑马灯的驱动开发,改进,移植以及演示;Linux下的QT应用程序—科学计算器的开发移植以及演示。 在开发的过程中我们也遇到了各种的问题,以至于交作业的时间远远晚于预期的时间,导致最后才交上作业。 在科学计算器移植到开发板上的过程中,遇见了触摸板不能使用的错误,需要反复的加载程序,加载触摸板功能驱动,花费了我们大量的时间和精力,几乎耗尽了我们的全部耐心,我们不得不在自己的笔记本电脑上安装Fedora和QT,安装的过程费时太久,整整耗费了四个多小时,然后中间还崩溃了两次,万幸,我们顺利的完成了作业,而且还能对操作过程倒背如流了,这不得不说也是一种收获。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 作业