1、中国计量学院嵌入式系统原理课程作品验收报告书(计算机科学与技术专业用)班 级 学 号 姓 名 指导教师 日 期 嵌入式相关资料一、课程作品设计目的和功能我们做的作品是简单的计算器,实现简单的四则运算以及幂运算、根运算、倒数运算。我们的作品主要是用 Qt 进行界面设计,以及后台进行运算控制。作品设计目的:开发简单的计算器,来帮助我们进行日常运算,这样,能够很好的服务我们。同时,我们在开发过程中,能够熟悉 Qt 开发,并且增进对嵌入式开发的了解。功能,实现简单的加减乘除、求根、求幂、求倒的运算。二、作品方案设计及开发过程、1.作品设计背景本学期,我们学习了嵌入式系统原理这门课,使我对嵌入式开发产生
2、了浓厚的兴趣,为了检验本学期的学习成果,所以决定做一个简单的作品,一方面,能够使自己对嵌入式开发的整体流程有一个更深的了解,另一方面,通过这个作品,我能够学习更多的知识。所以,有了本作品的诞生。2.功能描述本计算器主要有加减乘除等运算。可以进行浮点数的各种简单运算。并保留小数点后 5 位来保证计算的准确性。3.主要数据结构主要数据结构有类结构。4.主要函数说明void Button0Clicked(); 对按钮 0 进行事件处理的函数void Button1Clicked(); 对按钮 1 进行事件处理的函数void Button2Clicked(); 对按钮 2 进行事件处理的函数void
3、Button3Clicked(); 对按钮 3 进行事件处理的函数void Button4Clicked(); 对按钮 4 进行事件处理的函数void Button5Clicked(); 对按钮 5 进行事件处理的函数void Button6Clicked(); 对按钮 6 进行事件处理的函数void Button7Clicked(); 对按钮 7 进行事件处理的函数void Button8Clicked(); 对按钮 8 进行事件处理的函数void Button9Clicked(); 对按钮 9 进行事件处理的函数void addButtonClicked(); 对按钮 + 进行事件处理的函
4、数void divideButtonClicked(); 对按钮 / 进行事件处理的函数void dotButtonClicked(); 对按钮 . 进行事件处理的函数void multiplyButtonClicked(); 对按钮 * 进行事件处理的函数void subButtonClicked(); 对按钮 - 进行事件处理的函数void sumButtonClicked(); 对按钮 = 进行事件处理的函数void daoshuButtonClicked(); 对按钮 1/x 进行事件处理的函数void involutionButtonClicked(); 对按钮 进行事件处理的函数v
5、oid sqrtButtonClicked(); 对按钮 sqrt 进行事件处理的函数void clearButtonClicked(); 对按钮 c 进行事件处理的函数TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) 对该程序类中的个成员变量进行初始化5.算法流程图嵌入式相关资料三、调试记录与分析我们通过构造几组数据来对我们的程序进行调试,在已经在 arm 上运行的计算器程序上通过按钮输入以下数据:111+22.33
6、= 11+22-3*2/3= 23= 4sqrt = 2 1/x = 2.22= 5.2 sqrt = 3.4 1/x =经过测试,我们的计算器都能够计算出正确的结果。说明我们的计算器没有明显的漏洞。四、运行结果及说明我们进行了大量的测试,包括简单的整数个各种运算,浮点数的各种运算,各种运算的连续计算,都没有发现问题。说明我们设计的计算器没有严重的逻辑错误。五、课程作品设计总结本次作品设计,我们严格按照软件设计流程进行了严密的设计,从确定作品,再经过逻辑结构设计,界面设计,各函数消息响应,各个函数内部功能的实现,以及各嵌入式相关资料个按钮消息条件控制,到最后的调试和完善。我们都尽自己最大的努力
7、做到毫无遗漏。但尽管这样,我们在后期数据测试时还是碰上了几个问题,像我们对各个按钮在什么情况下能进行消息响应,以及我们对后台逻辑控制与前台界面按钮关联都曾碰到问题。但是在我们经过查阅资料和互相讨论后都顺利解决。另外,由于我们在进行作品设计之初对嵌入式开发还不是很了解,以及我们对 linux 系统的不熟悉,导致了很多小问题,比如各种命令的使用,和 arm 板进行交叉编译以及数据传输。但是,我们都一一克服了。总之,经过本次作品设计,我们对嵌入式系统原理这门实用的课程有了更深的了解,并能进行初步灵活的运用了,这才是最最关键的。参考资料1 参考文献1陈 琦.QT 的编程技术及应用J.科技信息,2008
8、(33):5032504.2李 凡.QtEmbedded 在嵌入式 Linux 系统下的移植与应用J.科技信息,2006,16(7):79280.3张芳辉,王建群.QtEmbedded 在嵌入式 Linux 上的移植J.计算机技术与发展,2006,16(7):64266.4何剑锋,邬文彪,李宏穆等.嵌入式 Linux 系统的 QtEmbedded 图形界面开发J.电子工程师,2007(33):46248.5王自强,刘海燕,李媛洲.Linux 下图形用户界面程序的开发与实现J.计算机应用与软件,2005,22(6):81283.6刘 波,周克贵.基于 QtEmbedded 和 Linux 的嵌入
9、式 GUI 的研究与实现J.仪器仪表用户,2007,14(6):19220.7孙天泽,袁文菊,张海峰.嵌入式设计及 Linux 驱动开发指南M.北京:电子工业出版社,2005.8李宋琛主编.Linux 面向对象窗口高级编程M.北京:科学出版社,2001附录I.作品界面嵌入式相关资料II.源程序1.main_form.h 头文件#if !defined (_MAIN_FORM_H_)# define _MAIN_FORM_H_#include “main_form_base.h“#include #include class TMainForm: public TMainFormBase Q_O
10、BJECTprivate:QString A,B;char c;bool only;public:TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) A=“0“;B=“0“;c= ;only = true;嵌入式相关资料virtual TMainForm() public slots:void clearButtonClicked();void Button0Clicked();void Button1Clicked();
11、void Button2Clicked();void Button3Clicked();void Button4Clicked();void Button5Clicked();void Button6Clicked();void Button7Clicked();void Button8Clicked();void Button9Clicked();void addButtonClicked();void divideButtonClicked();void dotButtonClicked();void multiplyButtonClicked();void subButtonClicke
12、d();void sumButtonClicked();void daoshuButtonClicked();void involutionButtonClicked();void sqrtButtonClicked();#endif2.main_form.cpp 文件#include “main_form.h“#include #include void TMainForm:Button1Clicked() /数字按键“1”的槽函数if(B=“0“)B=“1“; /如果 B 为 0 直接进行替代,想象下计算器,按了“1”键总不能显示的是“01”吧elseB=edit_in-text(); /
13、如果不是,先获取当前文本编辑框的内容,如 B=23,再按一下那么在后面追加 1B.append(1);edit_in-setText(B); /将 B 再次送到文本编辑框进行显示.void TMainForm:Button2Clicked() /同上嵌入式相关资料if(B=“0“) B=“2“;elseB=edit_in-text();B.append(2);edit_in-setText(B);void TMainForm:Button3Clicked() /同上if(B=“0“) B=“3“;elseB=edit_in-text();B.append(3);edit_in-setText(
14、B);void TMainForm:Button4Clicked()if(B=“0“) B=“4“;elseB=edit_in-text();B.append(4);edit_in-setText(B);void TMainForm:Button5Clicked()if(B=“0“) B=“5“;elseB=edit_in-text();B.append(5);edit_in-setText(B);void TMainForm:Button6Clicked()if(B=“0“) B=“6“;嵌入式相关资料elseB=edit_in-text();B.append(6);edit_in-setT
15、ext(B);void TMainForm:Button7Clicked()if(B=“0“) B=“7“;elseB=edit_in-text();B.append(7);edit_in-setText(B);void TMainForm:Button8Clicked()if(B=“0“) B=“8“;elseB=edit_in-text();B.append(8);edit_in-setText(B);void TMainForm:Button9Clicked()if(B=“0“) B=“9“;elseB=edit_in-text();B.append(9);edit_in-setText
16、(B);void TMainForm:Button0Clicked()if(B=“0“) B=“0“;else嵌入式相关资料B=edit_in-text();B.append(0);edit_in-setText(B);void TMainForm:dotButtonClicked() /这个是小数点键对应的 slot 函数,比较特殊,直接追加就可以了if(only = true)if(B=“0“) B.append(.);elseB=edit_in-text();B.append(.);edit_in-setText(B);only = false;void TMainForm:addBut
17、tonClicked() /加法键double n,m;B=edit_in-text();if(c= ) /如果 c 为空格键,说明现在是第一次运算,那么不进行任何操作,只是将B 复制给 A(注意 A 原来是“ 0”)/同时保存这一次的操作符,以便下一次计算.A=B;B=“0“;c=+;elsen=A.toDouble(); /如果上一次已经有运算符,那么将 A,B 都转换成浮点数m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);A=QString:number(n,
18、f,10); /再转换回字符形式嵌入式相关资料B=“0“; /将 B 重新初始化c=+;edit_in-setText(A); /显示中间结果only = true;void TMainForm:subButtonClicked() /减号double n,m;B=edit_in-text();if(c= )A=B;B=“0“;c=-;elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);if(c=$) n=sqrt(n);if(c=
19、) n=1.0/n;A=QString:number(n,f,10);B=“0“;c=-;edit_in-setText(A);only = true;void TMainForm:multiplyButtonClicked() /乘号double n,m;B=edit_in-text();if(c= )A=B;B=“0“;c=*;嵌入式相关资料elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);A=QString:number(n
20、,f,10);B=“0“;c=*;edit_in-setText(A);only = true;void TMainForm:divideButtonClicked() /除号double n,m;B=edit_in-text();if(c= )A=B;B=“0“;c=/;elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);A=QString:number(n,f,10);B=“0“;c=/;edit_in-setText(A);o
21、nly = true;嵌入式相关资料void TMainForm:sumButtonClicked() /等号键,同上类似double n,m;B=edit_in-text();if(c= )A=B;B=“0“;edit_in-setText(A);A=“0“;c= ;elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);A=QString:number(n,f,5);B=“0“;c= ;edit_in-setText(A);A=“0
22、“;only = true;void TMainForm:daoshuButtonClicked()/求倒数double n,m;B=edit_in-text();if(c= )n=B.toDouble();n=1.0/n;B=QString:number(n,f,10);edit_in-setText(B);A = B;B = “0“;else嵌入式相关资料n=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);n = 1.0/n;A=QSt
23、ring:number(n,f,10);B=“0“;c = ;edit_in-setText(A);only = true;void TMainForm:involutionButtonClicked()/求 n 次方double n,m;B=edit_in-text();if(c= )A=B;B=“0“;c=;elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);A=QString:number(n,f,10);B=“0“;c=;e
24、dit_in-setText(A);only = true;void TMainForm:sqrtButtonClicked() /开根号嵌入式相关资料double n,m;B=edit_in-text();if(c= )n=B.toDouble();n=sqrt(n);B=QString:number(n,f,10);edit_in-setText(B);A = B;B = “0“;elsen=A.toDouble();m=B.toDouble();if(c=+) n=n+m;if(c=-) n=n-m;if(c=*) n=n*m;if(c=/) n=n/m;if(c=) n=pow(n,m);n=sqrt(n);A=QString:number(n,f,10);B=“0“;c = ;edit_in-setText(A);only = true;void TMainForm:clearButtonClicked() /按了 C 键,所有都初始化A=“0“;B=“0“;c= ;edit_in-setText(B);only = true;3.main.cpp 文件#include “main_form.h“#include QTOPIA_ADD_APPLICATION(“mycalc“,TMainForm)QTOPIA_MAIN