嵌入式Linux大作业任务书.docx
《嵌入式Linux大作业任务书.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux大作业任务书.docx(27页珍藏版)》请在冰豆网上搜索。
嵌入式Linux大作业任务书
软件学院大作业任务书
课程名称:
嵌入式Linux应用程序开发
题目:
基于UP-CUP2440平台的驱动程序开发和QT程序开发
专业:
计算机软件
班级:
111
学号:
8000611034,8000611120,8000611018,
8000611012,8000611107
学生姓名:
刘亚林,郝悦,涂聪聪,余宴新,吕晓飞
完成人数:
5
起讫日期:
2014年5月15-2014年6月8日
任课教师:
李岚职称:
副教授
部分管主任:
完成时间:
2014年6月8日
说明
1.本任务书由任课教师填写后,下达到学生。
2.任务完成后,任课教师需填写小结表。
3.任务书、学生成绩与学生完成后的大作业(纸质和电子两种)一并报送各教学研究部审核后转教务办。
大作业的要求和内容:
(包括题目选择范围、技术要求、递交时间、考核方法等)
题目和技术要求:
1、编写基于UP-CUP2440硬件平台的GPIO驱动程序(必做)
必选功能:
使中断按键按下后,开发板上的LED灯能作如下闪动:
a)连续性闪动,跑马灯:
如:
1-2-3-1-2-3…或3-2-1-3-2-1
b)间隔性闪动:
如:
1-3-2-1-3-2…或3-1-2-3-1-2…
进阶功能:
改变中断按键的控制功能,使中断按键按下后,LED灯不断闪亮,再次按下后,LED灯灭。
要求提交大作业总结报告和相应程序。
2、编写基于linux平台的简单QT应用程序,可选如下程序(必做)
a)简单媒体播放器程序
b)简单记事本程序
c)简单计算器程序
d)简单通讯录程序
e)自选
必选功能:
要求实现在linux平台下可执行的QT程序。
进阶功能:
实现UP-CUP2440硬件平台下可执行的QT程序。
递交时间:
6月15日
考核方法:
提交大作业总结报告和现场演示
教师小结:
成绩:
教师签名:
教研部负责人:
学生姓名:
任务分工:
姓名:
刘亚林学号:
8000611034
分工:
驱动程序,QT程序M系列按钮功能实现,文档书写。
姓名:
郝悦学号:
分工:
QT程序环境搭建,createButton函数功能实现
姓名:
涂聪聪学号:
8000611018
分工:
QT程序界面设计,退格,清空以及清空所有的功能实现
姓名:
余宴新学号:
8000611012
分工:
QT程序功能设计,数字输入区3个相关槽函数实现
姓名:
吕晓飞学号:
8000611107
分工:
QT程序8个运算按钮的功能实现
目录
一、驱动程序-跑马灯-6-
(1)Fedora虚拟机操作-6-
(2)NFS挂载实验目录测试-8-
二、QT程序-科学计算器-10-
1.搭建QT环境-10-
1)搭建LINUX环境下QT环境-10-
2)WINDOWS环境下VS2008QT环境的搭建-10-
2.功能设计与代码编写-11-
(1)Main.cpp-11-
(2)头文件calculator.h-12-
(3)头文件button.h-13-
(4)类Calculator的实现文件calculator.cpp-13-
(5)函数的具体实现-15-
1.createButton函数-15-
2.M系列按钮MC、MR、MS、M+这4个运算对应的槽函数。
-15-
3.数字输入区域有3个相关的槽函数-16-
4.3个外形比较大的按键的槽函数-17-
5.8个运算按键-19-
3.使用QTE生成能在开发板上运行的GUI程序-22-
4.开发板运行结果-26-
一、驱动程序-跑马灯
(1)Fedora虚拟机操作
进入实验目录:
cd/UP-CUP2440/SRC/exp/basic/09_int
清除中间代码:
makeclean
编辑s3c2440-int.c:
gedits3c2440-int.c
由于原函数中断没有实现大作业要求,故在该源文件基础上进行修改,LED灯中断函数修改后如下所示:
irqreturn_ts3c2440_IRQ3_fun(intirq,void*dev_id,structpt_regs*reg)
{
printk("enterinterrupt5!
\n");
if(i%4==0)
{
led01_enable();
mdelay(200);
led01_disable();
mdelay(200);
led02_enable();
mdelay(200);
led02_disable();
mdelay(200);
led03_enable();
mdelay(200);
led03_disable();
}
elseif(i%4==1)
{
led01_disable();
led02_disable();
led03_disable();
}
elseif(i%4==2)
{
led01_enable();
mdelay(200);
led01_disable();
mdelay(200);
led03_enable();
mdelay(200);
led03_disable();
mdelay(200);
led02_enable();
mdelay(200);
led02_disable();
}
elseif(i%4==3)
{
led01_disable();
led03_disable();
led02_disable();
}
i++;
}
每次按下中断按键,i++,中断函数根据i来判断当前LED的操作:
1)i%4=0
LED灯按1-2-3次序闪动
2)i%4=1
LED灯全部灭掉
3)i%4=2
LED灯按照1-3-2次序闪动
4)i%4=3
LED灯全部灭掉
重新编译:
make
当前目录下生成驱动s3c2440-int.ko
(2)NFS挂载实验目录测试
ARM端挂载NFS实验目录;
进入串口终端的NFS共享实验目录;
执行程序:
insmods3c2440-int.ko
执行程序,按下实验板上的INTKEY中断按钮,产生中断,实验结果显示为:
二、QT程序-科学计算器
1.搭建QT环境
我们在设计QT程序的时候是在Windows环境下进行编程,故QT环境的搭建涉及到两个方面:
1)搭建LINUX环境下QT环境
包括安装QT开发环境,编译tslib1.4触摸屏,编译
QT/Embedded环境,已经在实验9里完成,不再一一赘述。
2)WINDOWS环境下VS2008QT环境的搭建
下载和安装QTSDK库、VisualStudio插件
根据使用的平台和开发环境下载相应的QT库,这里我们选择Windows平台和VS2008开发环境的QT库,当前最新版本为4.8.4;
下载VisualStudio2008对应的QT插件。
根据安装文件提示进行安装,安装完毕后,打开VisualStudio2008,我们在菜单栏可以发现有一个“QT”菜单:
单击“文件”—“新建”—“工程”菜单,新建一个QT项目,在打开的对话框中,“项目类型”选择“QT4Project”项,“模版”选择“QTApplication”,输入项目名称创建一个新的QT应用程序项目。
2.功能设计与代码编写
我们没有用QTDesigner来设计界面,而是直接在工程中利用QGridLayout来进行页面的布局。
工程整体目录如下所示:
其中button.h和calculator.h是头文件,其他的3个以.cpp结尾的文件时源文件,主要是头文件里面一些函数实现。
(1)Main.cpp
Main.cpp是整个文件的开始,这里面有整个程序的开始函数main主函数。
#include
#include"calculator.h"
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);//实例化一个应用
Calculatorw;//实例化计算器应用
w.show();//显示图像界面
returna.exec();//循环等待应用程序退出
}
(2)头文件calculator.h
头文件中定义了构造函数,私有槽函数以及一些私有成员函数,我在以下代码中加上了对私有槽函数和成员函数、成员变量的注释:
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
classQLineEdit;
QT_END_NAMESPACE
classButton;
classCalculator:
publicQDialog
{
Q_OBJECT
public:
Calculator(QWidget*parent=0);
privateslots:
voiddigitClicked();//数字按键9~9
voidunaryOperatorClicked();//平方,求根号,倒数
voidadditiveOperatorClicked();//“+”,“-”
voidmultiplicativeOperatorClicked();//”x”,”/”
voidequalClicked();//”=”
voidpointClicked();//”.”
voidchangeSignClicked();//”+/-”
voidbackspaceClicked();//”Backspace”
voidclear();//”Clear”
voidclearAll();//”ClearAll”
voidclearMemory();//”MC”
voidreadMemory();//”MR”
voidsetMemory();//”MS”
voidaddToMemory();//”M+”
private:
Button*createButton(constQString&text,constchar*member);//生成按键函数
voidabortOperation();//运算错误
boolcalculate(doublerightOperand,constQString&pendingOperator);
//运算函数(加减乘除)
doublesumInMemory;//MC,MR,MS,M+值保存
doublesumSoFar;//加法和减法运算值的保存
doublefactorSoFar;//乘法和除法运算值的保存
QStringpendingAdditiveOperator;//加法和除法运