linux大作业.docx

上传人:b****1 文档编号:10433965 上传时间:2023-05-25 格式:DOCX 页数:12 大小:346.07KB
下载 相关 举报
linux大作业.docx_第1页
第1页 / 共12页
linux大作业.docx_第2页
第2页 / 共12页
linux大作业.docx_第3页
第3页 / 共12页
linux大作业.docx_第4页
第4页 / 共12页
linux大作业.docx_第5页
第5页 / 共12页
linux大作业.docx_第6页
第6页 / 共12页
linux大作业.docx_第7页
第7页 / 共12页
linux大作业.docx_第8页
第8页 / 共12页
linux大作业.docx_第9页
第9页 / 共12页
linux大作业.docx_第10页
第10页 / 共12页
linux大作业.docx_第11页
第11页 / 共12页
linux大作业.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

linux大作业.docx

《linux大作业.docx》由会员分享,可在线阅读,更多相关《linux大作业.docx(12页珍藏版)》请在冰点文库上搜索。

linux大作业.docx

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,安装的过程费时太久,整整耗费了四个多小时,然后中间还崩溃了两次,万幸,我们顺利的完成了作业,而且还能对操作过程倒背如流了,这不得不说也是一种收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2