一、 简介
本说明文档的主要内容uboot移植、内核移植、文件系统制作、应用程序设计四大部分。硬件平台为友善之臂的micro2440开发板,uboot用的版本为u-boot-2011.03,linux内核版本为linux-2.6.32.2,busybox的版本为busybox-1.16.1,编译器版本为arm-linux-4.3.3,开发主机安装的linux系统为ubuntu 10.4。
二、 详细设计
<一>uboot移植
使用的uboot版本为u-boot-2011.03,主要实现的功能为:支持nandflash启动、支持DM9000、支持yaffs下载。
移植的过程比较复杂,具体详细的内容课参考《u-boot-2011.03在mini2440_micro2440上的移植》 。
<二>linux内移植
Linux内核版本用的是linux-2.6.32,参照的文档为友善之臂提供的《micro2440用户手册 -2010-6-9》 。
<三> 制作根文件系统
使用的工具为busybox-1.16.1,参考文档为本校提供的 《嵌入式系统设计实验指导书》 。
<四> 应用程序设计
应用软件的功能实现,包含以下几个方面:
(1)数据接收/发送
(2)数据显示
(3)数据存取
(4)数据编辑。
1、 数据的接收与发送
数据收发通过串口进行,设计思路:
A.打开串口设备文件
B.设置串口参数
C.检测串口状态
D.读取(写入)串口
使用到的函数:
(1)void MainWindow::on_pushButton_5_clicked() //发送按钮
/*函数名称:“发送”按钮的消息映射函数
函数功能:当用户点击发送按钮时,将编辑框内内容通过串口发送出去,若编辑框内容为空则发送一段默认的字符串(用于测试)。
变量说明:commfd用于存放串口设备文件的文件描述符,devicespeed设置波特率,bytebits 数据位长度,DeviceName设备名。
函数返回值:无返回值
其它说明:*/
(2)void MainWindow::on_pushButton_2_clicked() //采集按钮
/*函数名称:“采集”按钮的消息映射函数
函数功能:当用户点击“采集”按钮时,读取串口传送过来的数据。
变量说明:commfd用于存放串口设备文件的文件描述符,devicespeed设置波特率,bytebits 数据位长度,DeviceName设备名。
函数返回值:无返回值
其它说明:*/
2、数据的显示
将接收到的数据显示到数码管上,用display()函数,显示到历史数据显示区(plainTextEdit控件)用appendPlainText(QString(buf))函数,buf 是用于接收数据的字符数组。
在数据的显示时要注意数据类型的转换,因为QT中的控件操作的变量类型大多为QString类型,所以在显示时要将char型的数据转换为QString型。
3、 数据的存取
(1) 数据保存:
函数:void MainWindow::on_pushButton_4_clicked() //保存按钮
/*函数名称:“保存”按钮的消息映射函数
函数功能:当用户点击“保存”按钮时,弹出提示框,若用户选择默认保存则直接保存数据,若选择保存到其他路径则弹出另存为对话框。
变量说明:box 消息提示框。
函数返回值:无返回值*/
a. 默认保存路径
函数: bool MainWindow::save_file_default() //默认保存
/*函数名称:默认保存
函数功能:当用户选择默认保存时,将数据保存到当前应用程序所在路径下的“DATA”文件中,并加盖时间戳。
变量说明:filename 文件名;datatime 数据保存的时间;out(&file) 文件流对象。
函数返回值:无返回值*/
b定义保存路径
函数: bool MainWindow::save_file_as() //另存为
/*函数名称:另存为
函数功能:当用户选择另存为时,弹出文件名、路径输入对话框,若输入有效则保存文件到指定文件,并加盖时间戳。
变量说明:filename 文件名;datatime 数据保存的时间;out(&file) 文件流对象;path 路径名,name 文件名。
函数返回值:无返回值*/
(2)数据读取
函数: void MainWindow::on_pushButton_clicked() //查看按钮
/*函数名称:“查看”按钮的消息映射函数
函数功能:当用户点击“查看”按钮时,弹出提示框,并根据用户的选择弹出文本浏览器或撤销操作,若用户选择“是”则打开文本浏览器,“否”则返回。
变量说明:box 消息框
函数返回值:无返回值*/
文本浏览器相关函数说明:
a. 打开文件:void text_viewers::on_action_open_triggered()
/*函数名称:打开文件
函数功能:当用户选择打开文件时,将指定的文件中的内容读取到文本浏览器中。
变量说明:filename 将要打开的文件的文件名
函数返回值:*/
b. 关闭文件:void text_viewers::on_action_close_triggered()
//函数功能:当用户选择关闭文件时,清空文本浏览器中的文本内容,并隐藏文本框。
4、 数据编辑
数据的编辑输入使用的是软键盘,当用户点击用户界面上的编辑框时,自动弹出软键盘界面让用户进行编辑,编辑完成后返回原界面并返回编辑的数据,当用户点击界面上非编辑框的控件时,软解盘不响应。
(1) 事件过滤
事件过滤器的作用是保证软键盘只对点击编辑框的事件响应,而对其他控件的操作不响应。
函数:bool MainWindow::eventFilter(QObject *watched, QEvent *event) //事件过滤器
/*函数名称:事件过滤器
函数功能:对触摸屏事件进行过滤,判断用户进行了那种操作。在该程序中,过滤的是用户点击编辑框的事件。
变量说明:watched是窗口部件的句柄,event是事件类型。
返回值: 函数的返回值是bool值,表示的是过滤器是否成功将事件交还给上层对话框
其它说明:在函数体中对窗口部件及事件类型进行判断即可锁定软键盘所响应的控件和事件*/
(2) 数据编辑
软键盘由按钮控件组成,数据编辑的原理就是在按钮上显示字符供用户选择,当用户点击某一个按钮时,表示用户选择了该按钮上的字符,所以只需将用户点击的按钮上的字符记录到一个变量中,在编辑完成后将这个字符变量返回即得到了用户的编辑数据。将按钮上的字符记录到字符变量中的工作由按钮对应的槽函数完成。
至于大小写、数字、符号的输入切换,可通过功能键的按钮的槽函数来实现对键盘按钮上的字符进行改写来实现。
(3) 数据返回
在数据的返回上,我使用的是一个全局变量,也就是说软键盘编辑的数据直接保存到这个全局变量中,这样在这样一个简单的应用程序中使用起来比较方便。但是若要将软键盘进行封装并方便移植到其他应用程序中,使用信号与槽来传递参数会比较好。
用户451780 2014-8-12 11:03