




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于s3c2440的串口传输及其界面设计 专业: 电子信息工程 班级: 电子0801 姓名: 学号: 指导老师: 设计时间:2011/2012(1)学期第1、2周26目录一、 绪论31. 设计目的:32. 设计任务及要求:3二、 minigui在pc上的安装与运行31. 安装资源文件:32. 安装库文件:33. 安装qvfb:44. 编译演示文件:45. 配置参数:46. 运行演示文件:5三、 移植minigui到开发板61. 设置超级终端:62. 配置交叉编译环境:63. 新建移植目录:74. 编译libminigui75. 编译资源文件96. 修改minigui.cfg文件97. 编译例子程序10四、 minigui串口传输界面设计111. minigui设计知识介绍112. 主要部分解析:133. 运行界面:14五、 设计总结14六、 参考文献15七、 附录:15串口界面源代码:151、 绪论1. 设计目的:1进一步巩固嵌入式系统的基本知识;2掌握嵌入式应用系统的基本结构;3掌握嵌入式系统开发环境建立和使用;4掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;5学会查阅有关专业资料及设计手册;6. minigui界面编程。2. 设计任务及要求:1掌握嵌入式系统开发环境建立和使用;2掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;3、minigui在pc上的安装、移植;4、linux串口编程与minigui界面编程;5、串口传输数据(位图)并在tq2440的lcd上显示;6编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;7绘制有关图纸。2、 minigui在pc上的安装与运行1. 安装资源文件:1) 解压:# tar zxf minigui-res-1.6.10.tar.gz c /opt/minigui2) 安装:# make install2. 安装库文件:1) 解压:# tar zxf libminigui-1.6.10.tar.gz c /opt/minigui2) 编译:# ./configure # make3) 安装:# make install3. 安装qvfb:1) 解压:# tar zxf qvfb-1.1.tar.gz c /opt/minigui2) 编译和安装:# ./configure # make # make install4. 编译演示文件:1) 解压:# tar zxf mg-samples-1.6.10.tar.gz c /opt/minigui2) 编译:# ./configure # make # make install5. 配置参数:1) # gedit /usr/local/etc/minigui.cfg2) 输入:# gedit /etc/ld.so.conf.d/minigui.conf添加一行:/usr/local/lib执行:# ldconfigldconfig命令为刷新系统共享库缓存。6. 运行演示文件:1) 打开qvfb:# /opt/minigui/qvfb-1.1/qvfb/qvfb &2) 配置qvfb:3) 打开演示文件:# cd /opt/minigui/mg-samples-1.6.10/src # ./ helloworld3、 移植minigui到开发板1. 设置超级终端:打开“开始-附件-通讯-超级终端”,按照下图进行设置,然后打开开发板2. 配置交叉编译环境:1) 解压安装包:# tar xvfj eabi-4.3.3_embedsky_20091210.tar.bz2 c /opt2) 配置:# gedit /etc/profile ,添加一行pathmunge /opt/embedsky/4.3.3/bin ,如图所示:再执行# source /etc/profile 使配置立即生效。3) 输入# arm-linux-gcc v 查看是否成功:3. 新建移植目录:# mkdir /minigui-arm# mkdir /minigui-arm/tmp4. 编译libminigui1) 解压:# tar zxf libminigui-1.6.10.tar.gz c /minigui-arm2) 配置:# gedit configure在头文件开头指明交叉编译路径: cc= arm-linux-gcc cpp= arm-linuxcpp ld= arm-linux-ld ar= arm-linux-ar ranlib= arm-linux-ranlib strip= arm-linux-strip3) 编写脚本:# gedit /libminigui-1.6.10/libsetup.sh复制以下代码: #!/bin/sh ./configure -host=arm-linux -enable-jpgsupport=no -enable-pngsupport=no -enable-gifsupport=no -disable-lite -prefix=/minigui-arm/tmp -enable-smdk2410ial=yes make make install4) 执行脚本:# ./libsetup.sh编译后会在/minigui-arm/tmp下生成etc include lib 目录更新缓存: # cd /minigui-arm/tmp/lib # ldconfig5. 编译资源文件1) 解压:# tar zxvf minigui-res-1.6.10.tar.gz -c /minigui-arm2) 进入minigui-res-1.6.10目录,修改config.linux文件的第11行 topdir=/minigui-arm/tmp3) 编译:# make install生成的文件会保存到/minigui-arm/tmp/usr/local/lib/minigui/res 下,有以下几个目 录:bmp cursor font icon imetab6. 修改minigui.cfg文件# gedit /minigui-arm/tmp/etc/minigui.cfg再将minigui.cfg下载到开发板 /etc 目录下,将/minigui-arm/tmp/lib目录下的文件下载到开发板/usr/lib目录下,将/minigui-arm/tmp/usr/local/lib下的minigui目录下载到开发板/usr/local/lib目录下。7. 编译例子程序1) 解压:# tar zxf mg-samples-1.6.10.tar.gz -c /minigui-arm/2) 修改mg-samples-1.6.10目录下的configure文件:# gedit configure在头文件开头指明交叉编译路径: cc= arm-linux-gcc cpp= arm-linuxcpp ld= arm-linux-ld ar= arm-linux-ar ranlib= arm-linux-ranlib strip= arm-linux-strip3) 编写脚本:# gedit sampsetup.sh #!/bin/sh ./configure -build=i686-pc-linux-gnu -host=arm-linux -prefix=/minigui-arm/tmp/ ldflags=-l/minigui-arm/tmp/lib cppflags=-i/minigui-arm/tmp/include cflags=-i/minigui-arm/tmp/include make4) 拷贝可执行程序helloworld到开发板,并在超级终端运行测试程序:# ./helloworld如果开发板屏幕可以出来相应界面,则表示移植成功。4、 minigui串口传输界面设计1. minigui设计知识介绍1) 基本的编程概念minigui是一个图形用户界面支持的系统,通常的gui编程概念均适用于minigui编程,如窗口和事件驱动编程等。2) 头文件 他们是所有的minigui应用程序都必须包括的头文件。common.h 包含minigui常用的宏以及数据类型定义。minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义。gdi.h 包含minigui绘图函数的接口定义。window.h 包含了窗口有关的宏,数据类型,数据结构定义以及函数接口声明。control.h 包含预定义控件。3) 程序入口点一个c程序的入口点为main函数,而一个minigui程序的入口点为miniguimain,该函数原型如下:int miniguimain (int argc, const char* argv)4) 对话框的编程在minigui中,对话框是一类特殊的主窗口,这种主窗口只关注与用户的互向用户提供输出信息,但更多的是用于用户输入。对话框可以理解为子类化的主窗类。对话框模板如下: typedef struct char* class_name; dword dwstyle; int x,y,w,h; int id; const char* caption; dword dwadddata; dword dwexstyle;ctrdata;typedef ctrldata* pctrldata;typedef struct dword dwstyle; dword dwexstyle; int x,y,w,h; const char* caption; hicon hicon; hmenu hmenu; int controlnr; pctrldata controls; dword dwadddata;dlgtemplate;typedef dlgtemplate * pdlgtemplate; 结构ctrldata用来定义控件,dlgtemplate用来定义对话框本身。在程序中,应该首先利用ctrldata定义对话框中所有的控件,并利用数组表示;控件在该数组中的顺序,也就是对话框中用户按tab键时控件的切换顺序。然后定义对话框,指定对话框中的控件数目,并指定dlgtemplate结构中的controls指针指向定义控件的数组。 在定义了对话框模板数据后,需要定义对方框的回调函数,并利用dialogboxindirectparam(&dlgyourtaste, hwnd_desktop, dialogboxproc2, 0l)函数建立对话框。dialogboxproc2 (hwnd hdlg, int message, wparam wparam, lparam lparam)的msg_initdialog进行消息的循环。5) 程序退出用户单击窗口右上角的关闭按钮时窗口过程函数将收到一个msg_close消息。程序退出。2. 主要部分解析:1) 发送部分:发送部分采用的是按键发送的消息,然后发送写指令把数据写到串口获取发送信息:存储到buff中。 getwindowtext (hwnd, buff, 10);获取发送id号:发送文本信息:case idc_send:nwrite=write(fd,buff,strlen(buff);if(nwrite0) printf(receive letters=%sn,buff); printf(nwrite=%dn,nwrite); nwrite=0; break;2) 接收部分:接收部分采用的是创建一个新线程的办法,在新线程中接收数据,然后通过内存复制,把数据传回进程中。创建线程: if(pthread_create(&thread_id,null,(void*)readthread,null)!=0) printf(readthread create is failedn);线程程序: void readthread(void* arg) int nread; char str100; while(1) sleep(1); str99=0; nread=read(fd,str,100); if(nread0) printf(send letters nread=%dn,nread); printf(str=%sn,str); memcpy(&bufferstrlen(buffer),&str,strlen(str); 显示到文本框中:case idc_receive:setwindowtext(getdlgitem(getparent(hwnd),idc_chars),buffer);for (i=0;i100;i+) bufferi=0; break;3. 运行界面:5、 设计总结1. 在pc上运行测试程序时要先打开qvfb,再运行程序。2. 移植程序时要先确认是否配置了交叉编译环境。3. 开发板下载文件有以下三个方法:1)使用超级终端直接发送,优点是方便快捷,缺点是传输速度慢。2)利用nfs挂载pc,优点是传输速度快,缺点是配置繁琐,测试过程中经常导致开发板死机。3)开发板挂载u盘,经测试此方法简单易用,传输速度良好,故采用此方法,挂载命令如下:# mount t vfat /dev/sda /mnt/usbsda为u盘设备号,可能为其他。4. 运行脚本时,可能会出现权限不足的提示:可以修改文件属性来解决:# chmod 777 libsetup.sh6、 参考文献刘洪涛、孙天泽;嵌入式系统技术与设计;北京:人民邮电出版社李佳.arm系列处理器应用开发技术完全手册;北京:人民邮电出版社,2006.minigui编程指南2.0-4e;北京:北京飞漫软件技术有限公司minigui-user-manual-v1.3-1-c;北京:北京飞漫技术有限公司minigui-prog-guide-v1.3-c;北京:北京飞漫技术有限公司minigui技术白皮书;北京:北京飞漫技术有限公司minigui用户手册2.0-4e;北京:北京飞漫技术有限公司tq2440 用户手册;广州:天嵌技术有限公司7、 附录:串口界面源代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define false -1int speed_arr = b115200,b38400, b19200, b9600, b4800, b2400, b1200, b300,b38400, b19200, b9600, b4800, b2400, b1200, b300, ;int name_arr = 115200,38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;int fd=0;int nwrite=0;pthread_t thread_id;char *dev =/dev/tty;unsigned char buff 200=0;unsigned char buffer100;static dlgtemplate dlgboxinputchar = ws_border | ws_caption, ws_ex_none, 15, 15, 500, 400,#ifdef _lang_zhcn ,#else serial debugging software,#endif 0, 0,17, null,0;#define idc_char 100#define idc_chars 110#define idc_num1 121#define idc_num2 122#define idc_num3 123#define idc_num4 124#define idc_num5 125#define idc_num6 126#define idc_num7 127#define idc_num8 128#define idc_num9 129#define idc_num0 130#define idc_clear 131#define idc_send 132#define idc_receive 133static ctrldata ctrlinputchar = ctrl_static, ws_visible , 10, 10, 380, 18, idc_static, #ifdef _lang_zhcn :, #else please input a letter:, #endif 0 , ctrl_sledit, ws_visible | ws_tabstop | ws_border | es_center, 10, 40, 80, 25, idc_char, null, 0 , ctrl_static, ws_visible , 10, 100, 380, 18, idc_static, #ifdef _lang_zhcn :, #else receive letters:, #endif 0 , ctrl_mledit, ws_visible | ws_border | ws_vscroll | es_baseline | es_autowrap, 15, 150, 470, 140, idc_chars, null, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 170, 30, 25, 25, idc_num1, 1, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 205, 30, 25, 25, idc_num2, 2, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 240, 30, 25, 25, idc_num3, 3, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 170, 65, 25, 25, idc_num4, 4, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 205, 65, 25, 25, idc_num5, 5, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 240, 65, 25, 25, idc_num6, 6, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 170, 100, 25, 25, idc_num7, 7, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 205, 100, 25, 25, idc_num8, 8, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 240, 100, 25, 25, idc_num9, 9, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 275, 100, 25, 25, idc_num0, 0, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 275,30, 25, 60, idc_clear, c, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 110, 320, 80, 25, idc_send, send, 0 , ctrl_button, ws_tabstop | ws_visible | bs_defpushbutton, 220, 320, 80, 25, idc_receive, receive, 0 ,;int opendev(char *dev) fd = open(dev, o_rdwr | o_noctty | o_ndelay); if (-1 = fd) perror(cant open serial port); printf(dakai failn); return false; else return fd; int set_speed(int fd, int speed) int i; int status; struct termios opt; tcgetattr(fd, &opt); for ( i= 0; i 0) printf(send letters nread=%dn,nread); printf(str=%sn,str); memcpy(&bufferstrlen(buffer),&str,strlen(str); static void my_notif_proc (hwnd hwnd, int id, int nc, dword add_data) int i; unsigned char data10=1,2,3,4,5,6,7,8,9,0; if (id = idc_char & nc = en_change) getwindowtext (hwnd, buff, 10); switch(id)case idc_num1:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data0,0l);break;case idc_num2:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data1,0l);break;case idc_num3:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data2,0l);break;case idc_num4:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data3,0l);break;case idc_num5:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data4,0l);break;case idc_num6:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data5,0l);break;case idc_num7:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data6,0l);break;case idc_num8:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data7,0l);break;case idc_num9:sendmessage (getdlgitem (getparent(hwnd),idc_char),msg_char,data8,0l);break;case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工程施工监理合同协议
- 银行抵押还款合同(标准版)
- 室内装修监理合同(标准版)
- 项目开工合同(标准版)
- 模具费用合同(标准版)
- 内江市委社会工作部招聘新兴领域党建工作专员考试真题2024
- 河南省第三人民医院招聘考试真题2024
- 难点解析-人教版八年级上册物理声现象《声音的特性》综合测评试卷(详解版)
- 考点解析-人教版八年级上册物理物态变化《熔化和凝固》综合测评试题(详解版)
- 2025年建筑识期末试题及答案
- 分拣标准化培训课件
- 2025至2030中国电容膜片真空计行业项目调研及市场前景预测评估报告
- 女装秋冬商品培训
- 2025年新团员入团考试试题及答案
- 第2课《中国人首次进入自己的空间站》课件-2025-2026学年统编版语文八年级上册
- 2025年安全教育平台登录入口与模拟试题集
- 公司注销原合同补充协议
- 2025-2030中国区块链技术在供应链金融中的信用穿透效应
- 护理学用药安全知识培训课件
- 2025年《铁道概论》考试复习题库(含答案)
- 2025成人高等学校专升本招生统一考试政治试题及答案解析
评论
0/150
提交评论