嵌入式实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式课程设计报告
姓名:
学号:
组号:
项目名称:
1 设计背景
随着计算机技术、通信技术的快速发展和Internet的广泛应用,嵌入式系统已被广泛应用到工业控制、过程控制、通讯、航空航天、军事装备以及消费类产品等众多领域。

任何有微控制器的集成电路都可以做嵌入式开发,而ARM处理器作为微控制器芯片的一类,在嵌入式开发上具有独到的作用。

ARM处理器采用RISC架构,具有体积小,功耗低,成本低,性能高等特点。

如今,ARM处理器已经发展出很多系列,其中ARM7、ARM9、ARM9E、ARM10、和ARM11为5类通用处理器系列。

新研发出的处理器层出不穷,嵌入式操作系统如Linux、Windows CE,Palm OS等也在不断地完善中,这些也都促进着嵌入式产品的不断发展。

ARM处理器已经越来越多的受到人们的青睐。

本实验采用的硬件平台是UP-NETARM2410-S试验箱,其核心芯片为ARM920T 结构芯片,工作频率202MHz,由SAMSUNG公司生产的S3c2410X。

外围设备丰富:串口、USB、SD卡、网卡、LCD、音频设备等。

其系统资源如图1.1所示:
图1.1 博创2410-S嵌入式开发板
本次实验在上图所示嵌入式开发板上,完成了整个系统的开发,主要目标是通过QTOPIA平台,设计一款基于linux操作系统的串口调试工具,能完成如在windows操作系统平台下串口工具,完成串口选择、参数配置,并完成数据的发送和接收任务。

2系统设计方案
本次设计,主要是在redhat9下完成串口助手的界面设计,及软件功能设计,最后结合博创2410s的开发设备,完成相关硬件调试,及最终在开发板上QTOPIA 平台下的界面发布及调试。

具体的设计过程可分为以下几步:
①配置交叉编译环境:在虚拟机下加载redhat9,配置各种服务器,配置宿主机和目标机调试所用到的编译调试工具。

②串口功能调试:编写串口功能c程序,完成不带QT下串口操作读写的c 文件,并产生可执行文件在目标板上调试。

③设计界面:通过QT Designer设计界面,产生cpp文件和h文件。

④软件设计:加入相应串口助手功能,完成编译,产生可执行文件。

⑤宿主机调试:在电脑上linux下,调试串口助手。

⑥目标机发布:准备相应文件,在2410s开发板上通过Qtopia平台,发布
串口助手的应用程序。

具体的操作过程可以用图2.1所示的流程图表示出来:
图2.1 系统设计流程
3 串口调试与界面设计
3.1 串口功能调试
由于串口参数设置以及收发数据是本次系统设计中的核心,因此在进行QT 界面设计之前,我们首先对串口的参数设置以及收发数据,编写了响应的c文件,通过arm-linux-gcc编译器产生可执行,完成了串口功能不带qt显示的调试。

最基本的设置串口包括波特率设置,效验位和停止位设置。

串口的设置主要是设置 struct termios 结构体的各成员值,关于该结构体的定义可以查看。

设置这个结构体很复杂,可以参考 man 手册或者由赵克佳、沈志宇编写的《UNIX 程序编写教程》,我这里就只考虑常见的一些设置:波特率设置,校验位和停止位的设置,设置停止位。

3.2串口助手界面设计
在串口助手应用的界面中,用到了pushbutton模块(Turn on COM,Send Data,Recieve Data),comobox模块(COM,Buad rate ,Data bit,Even-odd,Stop bit),QTextBrowser模块(Input buffer,Output buffer)。

如图3.2为我们最终设计完成的ui界面:
图3.2 串口助手设计界面
界面的设计既可以直接通过自行编写程序来实现功能,也可以通过Qt Designer直接将所需要的模块拖拽出来,由于所设计的界面比较简单,整个界面的设计以及所用的模块选择都可以通过Qt Designer 来完成,就可以产生相应的ui文件。

然后我们通过执行uic指令,即可生成响应的h文件和uic文件,这样我们就可以通过cpp文件修改代码,实现最终功能。

具体操作指令如下所示:产生h文件:uic -o serial.h serial.ui
产生cpp文件:uic -o serial.cpp -impl serial.h serial.ui
3.3 QT界面串口助手功能实现
经过3.2步产生的cpp文件和h文件只是做了简单的界面显示,而没有实现具体的串口参数设置及功能,我们需要修改cpp和h文件,加入相应的串口函数,设置槽函数完成QT串口助手的功能设计。

利用Qt设计界面的好处是当将所需要的部件拖拽到界面上的同时,ui文件会自动生成相对应的代码,通过产生的cpp文件和h文件直接就能修改代码,这样对于初学者就无需自己编写结构体的主体代码,但是当设计复杂界面时就显的不利,因为ui生成的代码比较凌乱,逻辑性不好。

Qt 的信号与插槽机制则不同,Qt 部件(Widgets)事件发生时发出信号,如一个按钮被点击时会发出一个“clicked”信号。

程序员可以选择建立一个函数(称为插槽)并调用connect()函数来将这个信号与插槽连接起来。

用户在编程时可以将两个对象捆绑在一起而不需要知道每个对象的各自的信息,而且可以自己创建信号与插槽,发射自己的信号等等。

其基本结构如下:
connect( Object1, Singnal,Object2,Slot )
其中connect()函数是信号—槽的连接函数,该connect语句含义是:当Object1发出信号Singnal时,Object2就执行Slot函数,从而完成一定的功能。

本实验connect程序代码如下:
connect( pushButton1, SIGNAL( clicked() ), radioButton6, SLOT( toggle() ) );
connect( pushButton1, SIGNAL( clicked() ), this, SLOT( OPENserial() ) );
connect( pushButton3, SIGNAL( clicked() ), this, SLOT( SENDserial() ) );
connect( pushButton2, SIGNAL( clicked() ), this, SLOT( RECIEVEserial() ) );
当按下pushbutton1时就会实现点亮指示灯,打开串口设置相应参数的功能,按下pushbutton2时会接收串口数据并完成显示功能,按下pushbutton3会发送串口数据,完成显示功能。

4 编译调试
整个编译调试的过程也可分为两个过程,我们先在宿主机上调试显示,当达到最终效果时,再通过目标机下的编译器产生可执行文件,并准备相应图标,桌面启动文件,完成在目标板上的发布。

4.1 宿主机调试
在电脑redhat9系统下完成程序的显示调试,需要配置基于x86的编译器,编译产生可执行文件,再在此可以通过source指令运行一个脚本文件,这样能很快配置好环境,这个Qt_Command_host.sh的脚本内容如图4.1所示:
图4.1Qt_Command_host.sh脚本文件
整个主机上系统的调试,我们最后通过总结可以归纳为如下几步:
①配置开发工具
cd /root
source Qt_Commad_host.sh
②编辑main.cpp文件,并将它和之前编辑好的serial.cpp和serial.h文件放在一起。

③生成可执行文件
$TMAKEDIR/bin/progen –t app.t –o serial.pro 或qmake –project –o serial.pro
$TMAKEDIR/bin/tmake –o makefile serial.pro
Make
④可执行文件运行
先调出宿主机的虚拟缓冲帧framebuffer。

输入qvfb –width 640 –height 480 & 即可调出640×480像素的虚拟缓冲帧framebuffer。

这时在命令界面输入./serial –qws.
通过执行以上操作就可以在电脑端的redhat9操作系统下,得到如图4.2所示的显示界面:
图4.2 redhat9下显示串口助手界面
通过点击Turn on COM按钮,我们可以看到旁边指示灯点亮,但是当我们按以下两个按钮时,程序却发生的卡顿,总结原因,我觉得是在程序设计中,我们调用到的串口设备文件是为开发板的linux系统写的,因为发送和接收找不到响应的串口设备文件,所以这两个操作便无法完成。

4.2 目标板发布
串口助手程序在目标机的发布,因为运行环境的变化,我们需要重新配置适用2410s开发板的编译环境,这样产生的可执行文件才能在目标板上运行,这个步骤上我们同样参照了往届师兄编写留下来的脚本文件,从而简化了整个设计过程的流程。

具体产生可执行文件的步骤如下:
①配置目标机开发工具环境
在/root下source:source Qt_Command_target1.sh
②编译生成可执行文件
$TMAKEDIR/bin/progen –t app.t –o win.pro 或qmake –project –o win.pro(progen 运行不同过尝试此语句)
$TMAKEDIR/bin/tmake –o makefile win.pro
Make
在目标板的发布,除了准备可执行文件serial外,我们还需要一个启动图标,
一个后缀为.desktop的桌面启动文件,其中桌面启动文件的代码如下:[Desktop Entry]
comment=A serial Program
Exec=serial
Icon=serial
Type=Application
Name=serial
在设置好共享目录后,我们通过telnet服务器连接开发板,并通过nfs服务器完成共享,就可以将三个文件复制到相应的位置。

具体的发布过程,我将它们总结如下:
①在目标板linux下建立/host目录mkdir /host(如果/根目录下有可省去此步)
②在目标板linux设置nfs共享目录mount -t nfs 192.168.0.68:/root /host
(/root目录为自己设置,设置在此处就要把电脑linux下将三个准备文件复制在此处)
③在目标板linux下打开/host文件,夹拷贝相应文件到指定位置。

cp –fr /host/win /mnt/yaffs/Qtopia/bin
cp –fr /host/*.png /mnt/yaffs/Qtopia/bin (程序用到图片)
cp –fr /host/win.png /mnt/yaffs/Qtopia/pics (应用程序启动图片)
cp –fr /host/win.desktop /mnt/yaffs/Qtopia/apps/Applications
④在目标板linux下打开目录/mnt/yaffs/Qtopia启动linux系统
./qtopia.sh
如果配置成功且启动程序无问题,就可以在目标板启动的qt环境里找到可执行文件。

经过以上步骤,我们就可以在2410S开发板的QTOPIA环境下看到我们小组设计的串口助手调试,最后通过串口线,我们连接了pc的和2410s的串口1,在pc终端我们打开了一个串口助手软件,可以很清楚看到双端通信的全过程,也验证了我们设计系统最终的通信正常。

如图4.3为pc机上串口软件的显示值,而图4.4为2410开发板上我们设计的串口助手显示情况。

图4.3 pc串口软件显示结果
图4.4 2410串口助手显示结果
5 个人承担的工作
本次实验在我所负责的是QT界面设计部分。

由于之前没有过嵌入式的相关学习经历,首次学习嵌入式令我感觉陌生,与小组成员商议后我们最终确定做串口通信这一课题,相对于界面设计会相对简单一些。

界面主要分为三大模块:combox模块,pushbutton模块,QTextBrowser模块。

其中combox模块用来对串口号、波特率、奇偶校验、数据长度进行选择设置,pushbutton模块为串口的打开、发送、接收。

QTextBrowser模块为数据的发送和读取显示缓冲区。

由于先生成了ui文件,各模块的大小位置便确定下来,
头文件也自动生成无需更改,只需要将各个模块在h文件里重新声明定义名字,并且声明自己定义的函数名称。

核心部分是设置槽函数完成相对应的动作。

自定义的OPENserial(),SENDserial(),RECIEVEserial()3个函数,分别为串口初始化函数,发送数据函数,接收数据函数,这需要与串口调试同学相结合来完成通信功能。

6 遇到的问题与总结
1. 一开始对QT生成的ui文件与已有的cpp文件和h文件比较混淆,认为必须要先生成ui文件后才能转换成cpp文件和h文件,实际上ui文件可以生成h文件和cpp文件,也可以直接利用自己编写的cpp文件和h文件直接进行下一步操作。

2. UI设计后使用uic指令产生cpp、h文件无代码,通过咨询组员丁福文最后知道在输入uic指令的命令窗口,已经source了两个脚本文件Qt_Command_host.sh 和Qt_Command_target1.sh中的一个,重新开一个命令窗口编译即可。

3. Make过程报错,其中一个解决的办法就是把pro文件里的interface=后面的内容删除掉。

也可以将指令$TMAKEDIR/bin/progen –t app.t –o win.pro 换为qmake –project –o win.pro一般可解决问题。

4.可执行文件运行是执行的pro可执行文件名,而不是cpp文件名,由于没能认真熟悉界面主机调试流程,这种小错误在初期很费时间。

5. 配置主机开发工具环境用source Qt_Commad_host.sh,而配置目标机开发工具环境用source Qt_Command_target1.sh。

在目标版发布时没能区分导致低级错误。

通过这次试验让我对嵌入式系统有了初步的了解,首次进行界面设计存在许多大大小小的问题,有些问题非常低级,解决这种低级错误非常费时间费精力,非常感谢组员丁福文同学,他对嵌入式很了解,帮组我解决了许多的问题。

这一次实验让我明白了做事情一定要认真,因为犯小问题是很不值得的,那就能相当于浪费时间,因此,要认认真真做事,尽量避免没必要的错误,把时间和经历花在有意义的事情上。

相关文档
最新文档