




已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2次课MeeGo开发流程与开发基础,内容,嵌入式应用开发流程嵌入式应用开发环境嵌入式应用开发流程嵌入式开发工具链MeeGo的开发工具链宿主机与仿真机环境配置QT知识Qt介绍Qt安装基于QT的HelloWorld示例程序Qt中主要类的介绍Qt的信号槽机制Qt中主要控件介绍,一、嵌入式应用开发流程,嵌入式应用开发环境交叉开发编程语言嵌入式应用开发流程嵌入式开发工具链,交叉开发,通用计算机的软件开发一般都是以本地(Native)编译或开发的方式进行,嵌入式系统一般不支持本地环境开发,其软件开发通常采用交叉(Cross)开发的方式。交叉开发环境建立在宿主机(Host)上,宿主机又称开发机,一般是一台通用计算机,如PC。对应嵌入式系统称为目标(Target)机。目标机指各式各样的嵌入式设备,例如手机、掌上电脑等;或者是嵌入式厂商提供的一套专用于开发的评估板(evaluationboard),所以又称开发板;甚至是基于软件的模拟器。开发时使用宿主机上的交叉编译、汇编和链接工具形成可在目标机上执行的二进制代码,然后把可执行文件下载到目标机上运行。嵌入式系统开发过程中不仅编译(包括链接等步骤)采用交叉的方式,调试也常采用交叉的方式。,交叉开发,采用交叉开发的原因主要原因在于目标机上往往无法进行有效的本地编译。目标机硬件本身在开发过程中还不能使用或还不够稳定;目标机平台上缺乏完整的本地编译工具、环境;目标机系统本身性能不够导致编译太慢。嵌入式系统的软件编译,与Windows开发不一样,不仅要编译应用程序,还要编译相应的依赖库、操作系统内核等。所以一次完整的编译非常费时。而从硬件角度,决定编译速度的主要因素是CPU速度、内存容量和文件系统I/O速度。而这些方面在嵌入式系统上往往都要比PC差很多。这样会造成目标机系统上进行本地编译效率低下。综合以上多方面因素的考虑,嵌入式系统开发一般都采用交叉开发方式,如交叉编译(包括交叉链接)、交叉调试等。,交叉开发,宿主机和目标机的连接一般通过串口、并口、USB或以太网等连接线进行连接。交叉开发过程在宿主机上会安装用于嵌入式软件开发的一系列工具集,例如代码编辑工具、编译器、连接器、调试工具、软件配置管理工具等。开发者在宿主机一端完成代码编写和调试。,交叉开发,宿主机和目标机的差异体系结构的不同。宿主机和目标机通常是异构的。宿主机一般采用x86体系结构,但是目标机的体系结构则可能非x86的,如是ARM、MIPS、PowerPC等各式各样。处理能力不同。通常宿主机的处理速度、存储容量等会远远大于目标机。运行的操作系统不同。宿主机一般运行通用操作系统,而目标机通常运行各种嵌入式操作系统。输入输出方式不同。相对宿主机,目标机的输入输出功能可能比较单一。,编程语言,本书采用的主要语言由于C/C+拥有便于底层编程等诸多优点,目前C/C+为大多数嵌入式系统开发的首选语言。考虑到现实的发展状况,我们在后续章节的应用开发中首选语言也是C/C+。,嵌入式应用开发流程,典型的开发流程示意图,编码阶段,构建阶段,部署阶段,调优阶段,嵌入式应用开发流程,开发流程主要分为如下几个阶段:1编码阶段编码阶段是软件开发的开始,其任务是编写软件的源代码代码,使用的工具是各种编辑器。2构建阶段构建阶段的任务是把代码转化成可以在嵌入式硬件上可执行程序的过程。此阶段包括包括编译,链接、定址和打包等步骤。3部署阶段部署是把可执行的运行时映像或可执行文件部署到嵌入式设备上,让嵌入式设备在系统上电后可以启动并加载开发者编写的代码。4调优阶段(调试、优化阶段)此阶段主要是对软件进行调试和性能优化。调试:即使再有经验的软件工程师,要编写完全没有错误的程序也是不可能的。嵌入式软件调试的效率都比较低,因为即使改动一行代码,都可能需要把编译、链接、重定位、烧写、下载等步骤完整走一遍,这也是调优阶段最显著的特点。快速地定位到问题可以节省大量的时间。,嵌入式应用开发流程,4调优阶段(调试、优化阶段)优化对于软件产品最低目标是能正确的运行,还需要优化,优化目标主要包括是速度性能、功耗性能、空间性能等方面,达到运行更快,更节能,占用空间更小等目的。借助工具分析程序代码,精确分析性能瓶颈,据此引导和建议开发者进行改进,此过程常称为代码剖析(codeprofiling),对应的工具常常称为剖析器(profiler)或性能分析器(performanceanalyzer)、Intel的VTune。,典型的开发工具链,工具链的概念在嵌入式软件开发的各个阶段都相应的工具帮助用户来完成其工作,这些工具形成与开发流程对应的工具链(Toolchain),又称工具集。,嵌入式软件开发典型工具,典型的开发工具链,Moblin平台下的工具集在Linux、Moblin平台下最有名的工具集是GNU和Intel两家。由于GNU工具集的跨平台、开放性、使用广、与其他工具兼容等特点,使得其成为嵌入式应用开发的首选工具.GNU工具链GNU的开发工具都是免费的,遵循GPL协议,任何人都可以从网上获取。同样GNU也为嵌入式系统、x86系统下的软件开发提供了完整的工具链。这些工具包含编译器、汇编器、链接器、调试工具等。这些工具它们可以以命令行形式单独运行,也可以集成到Eclipse等集成开发环境中。,典型的开发工具链,GNU工具链生成目标文件的几种途径方法一:使用gcc命令分别编译、链接各源代码文件,生成可执行的目标文件。方法二:用户编写makefile等配置文件,然后用make一步生成可执行的目标文件。方法三:使用系统构建自动工具autotools制作makefile等配置文件,然后用make一步生成可执行的目标文件。,二、MeeGo的开发工具链,交叉开发:宿主机:生成目标可执行文件和调试的机器,一般是一台PC目标机:MeeGo运行平台,手机、上网本或者仿真器(qemu),MeeGo交叉开发的实际环境,MeeGo交叉开发的仿真环境,仿真,仿真的情景,仿真(1),仿真(2),二、MeeGo的开发工具链,几个术语,1、QEMUMeeGo的虚拟机(emulator)仿真环境之一或者叫仿真器。2、Xephyr(,二、MeeGo的开发工具链,3、宿主机Qt开发工具链:$ls-l/opt/meego/meego-sdk-qt/bin,1、InstallingtheMeeGoSDK安装对应CPU架构的编译工具链(1)$sudoapt-getinstallmeego-sdk,2、InstallMeeGoTarget安装对应CPU架构的编译工具链(2),$sudomad-admincreate-fmeego-netbook-ia32-1.1用来下载下载meego-core-ia32-madde-sysroot-1.1-fs.tar.bz2,CreateaMeeGotargetusingMADDE,三、宿主机与仿真机环境配置,2、配置QTCreator,1、打开上网本仿真器(目标机)$madremote-rmeego-netbook-ia32-qemu-1.1.20101031.2037-sda-runtimepoweron登录到目标机里面去:$sshmeegop6666进入目标机(不管是仿真器还是实际机都要执行如下步骤),运行如下命令:$xhost+,3、配置工程的build环境,4、编译生成MeeGo目标文件,在QTCreator环境里面打开一个.pro工程文件,5、选择目标机Run环境,6、部署运行与停止运行,四、QT介绍,Qt介绍Qt安装基于QT的HelloWorld示例程序Qt中主要类的介绍Qt的信号槽机制Qt中主要控件介绍,21,Qt介绍,Qt是跨平台的应用程序和UI框架,包括跨平台类库集成开发环境跨平台IDE一次性开发可在不同桌面和嵌入式操作系统部署,22,Qt特征一,面向对象Qt具有模块设计和注重软件构件或元素的可重用性的特点构件支持Qt提供信号signal和槽slot的概念,支持对象之间在彼此不知道对方的情况下合作,使得Qt适合构件编程友好的联机帮助Qt提供了大量的联机参考文件,23,Qt特征二,便利性Qt是跨平台的GUI工具包,对编程者隐藏了处理不同窗口系统时的潜在问题国际化Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,24,Qt特征三,丰富的API函数Qt为开发者提供了大量的函数可用户化外观Qt支持主题,基于Qt的应用程序能够在Windows外观,Motif外观以及其他一些用户外观主题之间切换完整的组件工具Qt编程的基本模块叫做组件,Qt含有用来创建专业外观用户界面需要的所有组建,25,Qt介绍,WhousesQt?WritecodeoncetotargetmultipleplatformsCreateamazinguserexperienceDomorewithlessandfasterBlendwebandnativecodeinasingleapplication,26,QtSDK,QtSDK,27,Qt中主要的类介绍,QObjectQObject类是所有能够处理signal,slot和事件的Qt对象的基类,原型如下:QObject:QObject(Qobject*parent=0,constchar*name=0)在上面的函数中,如果parent为0则构造一个无父的对象;如果对象是一个组件,则它会成为顶层窗口。,28,Qt中主要的类介绍,2.QApplicationQApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件处理应用程序的开始,结束以及会话管理QApplication是QObject类的子类,29,Qt中主要的类介绍,3.QwidgetQWidget是所有用户接口对象的基类,继承了QObject类的属性组件是用户界面的单元组成部分,接收鼠标,键盘和从其它窗口系统来的事件QWidget类有很多成员函数,但一般不直接使用,而通过子类继承来使用其函数功能QWidget是QObject类的子类,30,信号和槽,信号和槽机制是Qt的一个主要特征,是Qt与其它工具包最不相同的部分。在图形用户界面编程中,经常会出现窗口的一个部件发生的变化会被通知给另一个部件。Qt采用信号和槽实现对象部件之间的通信,31,信号和槽的声明一,在Qt程序设计中,包含signals和slot的类都要加上Q_OBJECT的定义。下面给出一个在类中定义signal和slot的例子classStudent:publicQobjectQ_OBJECTpublic:Student()myMark=0;intgetMark()constreturnmyMark;publicslots:voidsetMark(intnewMark);signals:voidmarkChanged(intnewMark);private:intmyMark;,32,信号和槽的声明二,Signal的发出一般在事件的处理函数中,利用emit发出signal,下面的例子中在事件处理结束后发出signalvoidStudent:setMark(intnewMark)if(newMark!=myMark)myMark=newMark;emitmarkChanged(myMark);,33,信号和槽的连接一,在signal和slot声明以后,需要使用connect()函数将它们连接起来。Connect()函数属于QObject类的成员函数,能够连接signal和slot,也能够连signal和signal。函数原型如下boolconnect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*slot)其中第一个和第三个参数指出signal和slot属于的对象或组件,34,信号和槽的连接二,使用connect()函数进行连接的时候,还需要用到SIGNAL()和SLOT()两个宏,使用方法如下:QLabel*label=newQLabel;QScrollBar*scroll=newQScrollBar;QObject:connect(scroll,SIGNAL(valueChanged(int),label,SLOT(setNum(int);,35,信号和槽的连接方式一,同一个信号连接到多个槽connect(slider,SIGNAL(valueChanged(int),spinBox,SLOT(setValue(int);connect(slider,SIGNAL(valueChanged(int),this,SLOT(updateStatusBarIndicator(int);多个信号连接到同一个槽Connect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();Connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError();,36,信号和槽的连接方式二,一个信号连接到另外一个信号connect(lineEdit,SIGNAL(textChanged(constQstring取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有连接,37,Qt安装,Qt下载,38,Qt安装,下载安装文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安装步骤如下:1.添加执行权限chmodu+xQt_SDK_Lin32_offline_v1_1_beta_en.run2.运行安装文件./Qt_SDK_Lin32_offline_v1_1_beta_en.run3.添加环境变量将Qt安装目录下的bin目录加入到环境变量PATH中,39,HelloWorld程序实例,创建目录mkdir/examples/hello创建源文件touchhello.cpp编写源文件vihello.cpp,40,HelloWorld程序实例,切换到hello目录cd/examples/hello创建平台独立的工程文件projectfileqmakeproject创建平台独立的Makefile文件编译工程make运行程序./hello,41,Qt对话框,对话框是一种特殊的窗口,一般用来提供反馈信息或从用户获取输入。给用户提供了同应用程序进行交互的方式,42,Qt对话框,模态对话框最普遍的对话框。在未消失前用户不能够与同一个应用程序的其他窗口进行交互,直到该对话框关闭。非模态对话框当对话框打开的同时,用户还可与同一应用程序的其他窗口进行交互。,43,Qt对话框,Qt对话框的类层次结构图,44,几种Qt内置对话框介绍,颜色对话框QColorDialog,允许用户选择设置颜色错误对话框QErrorDialog,显示错误信息文件对话框QFileDialog,允许用户选择一个或多个文件或目录字体对话框QFontDialog,允许用户选择、设置字体输入对话框QInputDialog,允许用户输入文本信息页设置对话框QPageSetupDialog,可配置与打印相关的页面设置进度对话框QProgressDialog,指示出一项操作的工作进度,而且提示用户该操作是否停滞打印对话框QPrintDialog,配置打印机相关选项,45,几种Qt内置对话框介绍,颜色对话框QColorDialog,允许用户选择设置颜色错误对话框QErrorDialog,显示错误信息文件对话框QFileDialog,允许用户选择一个或多个文件或目录字体对话框QFontDialog,允许用户选择、设置字体输入对话框QInputDialog,允许用户输入文本信息页设置对话框QPageSetupDialog,可配置与打印相关的页面设置进度对话框QProgressDialog,指示出一项操作的工作进度,而且提示用户该操作是否停滞打印对话框QPrintDialog,配置打印机相关选项,46,查找对话框示例,通过一个简单的查找对话框的实现了解Qt中对话框的创建过程,布局管理,信号和槽机制以及一些简单控件的使用,47,查找对话框示例,头文件finddialog.h1#ifndefFINDDIALOG_H2#defineFINDDIALOG_H3#include4classQCheckBox;5classQLabel;6classQLineEdit;7classQPushButton;8classFindDialog:publicQDialog910Q_OBJECT11public:12FindDialog(QWidget*parent=0);,48,查找对话框示例,13signals:14voidfindNext(constQString27#endif,49,查找对话框示例,12行FindDialog的构造函数是典型的Qt窗口部件类的定义方式。Parent参数指定了父窗口部件。该参数默认值是一个空指针,意味着该对话框没有父对象。13行开始的signal部分声明了当用户单击Find按钮时对话框发出的两个信号。,50,查找对话框示例,1#include2#includefinddialog.h3FindDialog:FindDialog(QWidget*parent)4:QDialog(parent)56label=newQLabel(tr(Find,51,查找对话框示例,15connect(lineEdit,SIGNAL(textChanged(constQString,52,查找对话框示例,通过connect函数实现了信号和槽的连接只要行编辑器中的文本发生变化,就会调用私有槽enableFindButton当用户单击Find按钮时,会调用findClicked私有槽当用户单击Close时,对话框关闭,53,查找对话框示例,21QHBoxLayout*topLeftLayout=newQHBoxLayout;22topLeftLayout-addWidget(label);23topLeftLayout-addWidget(lineEdit);24QVBoxLayout*leftLayout=newQVBoxLayout;25leftLayout-addLayout(topLeftLayout);26leftLayout-addWidget(caseCheckBox);27leftLayout-addWidget(backwardCheckBox);28QVBoxLayout*rightLayout=newQVBoxLayout;29rightLayout-addWidget(findButton);30rightLayout-addWidget(closeButton);31rightLayout-addStretch();32QHBoxLayout*mainLayout=newQHBoxLayout;33mainLayout-addLayout(leftLayout);34mainLayout-addLayout(rightLayout);35setLayout(mainLayout);36setWindowTitle(tr(Find);37setFixedHeight(sizeHint().height();38,54,查找对话框示例,Qt提供了布局管理器布局子窗口部件通过QHBoxLayout,QVBoxLayout和QGridLayout这三个布局的不同嵌套组合,就可以构建出相当复杂的对话框。,55,查找对话框示例,39voidFindDialog:findClicked()4041QStringtext=lineEdit-text();42Qt:CaseSensitivitycs=43caseCheckBox-isChecked()?Qt:CaseSensitive:Qt:CaseInsensitive;44if(backwardCheckBox-isChecked()45emitfindPrevious(text,cs);46else47emitfindNext(text,cs);484950voidFindDialog:enableFindButton(constQString53,56,查找对话框示例,以上两个函数是对话框中用到的槽当用户单击Find按钮时,就会调用findClicked槽。而该槽会发射findPrevious或findNext信号,这取决于Searchbackward选项的取值只要用户改变了行编辑器中的文本,就会调用enableFindButton槽。如果在行编辑器中有文本,该槽就会启用Find按钮,否则它会禁用Find按钮,57,查找对话框示例,创建main.cpp文件测试FindDialog窗口部件1#include2#includefinddialog.h3intmain(intargc,char*argv)45QApplicationapp(argc,argv);6FindDialog*dialog=newFindDialog;7dialog-show();8returnapp.exec();9,58,Qt主窗口介绍,应用程序的主窗口提供了用于构建应用程序用户界面的框架主窗口一般包括菜单栏,工具栏,状态栏,中央窗口部件等子控件在Qt中,通过子类化QMainWindow可以创建一个应用程序的主窗口,59,Qt主窗口介绍,60,Qt主窗口介绍,下面通过一个简单的代码分析了解Qt中主窗口的创建过程实现主窗口的源代码分别放在mainwindow.h和mainwindow.cpp中,61,Qt主窗口介绍,Mainwindow.hclassMainWindow:publicQMainWindowQ_OBJECTpublic:MainWindow(QWidget*parent=0);MainWindow();privateslots:voidnewFile();voidopenFile();voidcut();voidcopy();private:voidcreateActions();voidcreateMenus();voidcreateStatusBar();voidcreateToolsBar();,62,Qt主窗口介绍,private:QMenu*fileMenu;QMenu*editMenu;QAction*newAction;QActi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京大学党委办公室校长办公室招聘模拟试卷及答案详解参考
- 班组安全建设培训课件
- 2025辽宁阜新能源控股集团所属阜矿集团招聘90人模拟试卷及答案详解(名师系列)
- 充电服务费监管-洞察与解读
- 2025年4月四川成都市成华区中医医院招聘编外人员3人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025广西柳州市港航发展中心招聘编外合同制工作人员1人模拟试卷及参考答案详解一套
- 2025江苏南京市玄武区人民政府玄武门街道办事处招聘编外人员5人考前自测高频考点模拟试题及答案详解一套
- 太赫兹能量收集-洞察与解读
- 2025年牡丹江绥芬河市公开招聘公益性岗位工作人员20人(第一批)考前自测高频考点模拟试题附答案详解
- 2025春季江淮汽车校园招聘正式启动模拟试卷完整参考答案详解
- 普外科肛肠科科室介绍
- 事业单位工勤人员技师考试职业道德复习试题及答案
- 2025年三级安全教育试题及答案
- 危化品经营许可证管理办法
- 2024和2025年中职高考对口升学(理论考试)真题卷【财经商贸大类】
- 苏教版一年级科学上册教学资源计划
- 慢性硬脑膜下血肿护理查房
- 矿山爆破施工管理制度
- AI技术赋能中小学教学模式创新与实践研究
- 装配钳工试题库及答案
- 智慧水务系统的构建与实施-全面剖析
评论
0/150
提交评论