嵌入式课程设计报告.docx

上传人:l*** 文档编号:11787266 上传时间:2022-04-22 格式:DOCX 页数:39 大小:39.97KB
返回 下载 相关 举报
嵌入式课程设计报告.docx_第1页
第1页 / 共39页
嵌入式课程设计报告.docx_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《嵌入式课程设计报告.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告.docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、嵌入式课程设计报告 福建工程学院 嵌入式系统课程设计 报告书 题目: 基于S3C2440设备驱动及其界面设计 班级: 姓名: 学号: 指导老师: 陈靖,张平均,李光炀 目 录 一、设计课题 .4 二、设计目的 .4 三、设计任务及要求 .4 四、设计内容 .5 五、操作界面的生成 .7 六、操作界面调试 .9 七、设计总结 .10 八、设计参考书 .12 九、附件(程序) .13 一、设计课题 基于S3C2440的设备驱动及其界面设计 二、设计目的: 1进一步巩固嵌入式系统的基本学问; 2驾驭嵌入式应用系统的基本结构; 3驾驭嵌入式系统开发环境建立和运用; 4驾驭嵌入式系统基本驱动、应用程序的

2、设计调试和编译移植方法; 5学会查阅有关专业资料及设计手册; 6.MiniGUI界面编程。 三、设计任务及要求: 1驾驭嵌入式系统开发环境建立和运用; 2驾驭嵌入式系统基本驱动、应用程序的设计调试和编译移植方法; 3、MiniGUI在PC上的安装、移植 4、Linux基本输入输出驱动程序设计编译与移植 5、基于MiniGUI的基本输入输出应用编程编译与移植 6、编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的运用说明; 7、绘制有关图纸. 四、设计内容: 1、基础学问打算 1)讲解设计任务; 2)熟识ubuntu的运用; 3)熟识TQ2440试验系统的运用; 4)驾驭嵌入式系统

3、开发环境建立和运用; 5)驾驭嵌入式系统基本驱动、应用程序的设计调试和编译移植方法. 2、界面设计环境构建:MiniGUI在PC上的安装、移植 2.1、MiniGUI在pc机上安装和运行 建立工作书目:mkdir /minigui-free cd /minigui-free mkdir /src 复制源文件包到工作书目:cp /mnt/hgfs/D/src/* /minigui-free 解压文件到/minigui-free: tar zxvf libminigui-1.6.10.tar.gz tar zxvf minigui-res-1.6.10.tar.gz tar zxvf mg-sam

4、ples-1.6.10.tar.gz 2.2、MiniGUI库安装 (2)将libcro.sh考到minigui的lib库的解压文件夹中 (3)将rescro.sh 考到minigui的res资源解压文件夹中 (4)将samplecor.sh 考到sample例子解压文件夹中 (5)依次运行libcro.sh,rescro.sh,samplecor.sh (6)到nfsroot的,书目下,将libreduce.sh考到这个书目下,运行libreduce.sh 2.3、安装qvfb (1)解压qvfb1.1.tar.gz (2)./configure (3)make (4)make instal

5、l 2. 4、配置MiniGUI.cfg vi /etc/MiniGUI.cfg 修改如下部分为 system # GAL engine and default options gal_engine=fbcon defaultmode=800x480-16bpp # IAL engine ial_engine=fbcon mdev=/dev/mouse mtype=IMPS2 fbcon 6 defaultmode=800x480-16bpp qvfb defaultmode=800x480-16bpp display=0 1.5运行MiniGUI例子程序 (1)打开qvfb:qvfb & (

6、2)运行helloword: 五、操作界面的生成 1、操作界面面执行文件的生成 1).在/minigui-free/mg-samples-1.6.10/src/修改源文件treeview.c 2).再次运行samplecor.sh,生成执行文件treeview 2、利用nfs进行挂载 1).将本地PC机的网络方式设置成为桥接 2).查看/etc/exports下可以挂载的书目 3).启动服务/etc/init.d/nfs-kernel-server restart 4).查看本机和ARM上的IP地址,设置在同一网段,然后ping,使其能够互通。 5).在超级终端上,进行操作 Mount -o

7、nolock,rsize=1024,wsize=1024 本机IP:/ /mnt 将虚拟机和ARM进行挂载,可以查看到虚拟机根书目下的文件。 3、在超级终端上将须要的文件从虚拟机上复制到ARM机上 1).重新烧写文件系统镜像文件 2).挂载胜利后,将/mnt/minigui-free/nfsroot/lib/*复制到/usr/lib/ 3).将/mnt/minigui-free/nfsroot/usr/local/lib/*复制到/usr/local/lib/ 4).将/mnt/etc/MiniGUI.cfg复制到/etc/ 8 5).将/mnt/minigui-free/mg-samples

8、-1.6.10/src/*复制到/usr/minigui/ 4、在超级终端上运行执行文件 1).进入/usr/minigui/运行treeview文件 2).可以再操作界面上现实我们所设计的界面 六、操作界面调试 1、点击LED1LED2LED3LED4,分别限制四盏led灯的亮暗,调试界面如下: 2、输入频率值,点击START键限制四盏led灯闪耀,调试界面如下: 七、设计总结 1、设计过程中遇到的问题 错误1: InitGUI: Can not initialize colors of window element! InitGUI failure when using /usr/loca

9、l/etc/MiniGUI.cfg as cfg file.解决方法:正确配置MiniGUI.cfg文件 错误2: Permiion denied 解决方法:权限不够,运用root用户登录。 错误3: 编译出错未找到jpeg,png等 解决方法:安装zlib,png,jpeg库。 错误4: 出现符号未找到等编译错误 解决方法:make clean 后在make 错误5: 在minigui创建和移植的过程中,出现lib库编译不胜利的现象,这是由于minigui是基于qt3的,因此须要添加qt3所在路径至配置文件。 错误:6 在开发板上添加鼠标设备后,提示视频采集失败,这是因为/etc下的配置文件

10、MiniGUI.cfg中对外设限制范围的限制过大,银将其修改为与界面统一大小800*480.错误:7 在执行led灯限制程序之前应当首先停止开发板上原有的流水灯进程led-player。 错误:8 运行执行程序treeview后界面上出现两个光标,此时应当在/etc/init.d下的rcS文件中停用qt3的光标。 2、心得体会 本学期为期两周的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新学问,回顾了以前的一些快要遗忘的学问点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清晰地相识到了自己在软件开发及学习

11、上的一些不足之处。 两周的课程设计,在计算机这个博大深邃的领域我感觉自己还有好多东西要学,还有好多的东西不懂!嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在将来能够得到更加广泛的应用。学好嵌入式,C语言很重要,所以感觉自己有必要在学习、积累一下这方面的学问。许多东西的学习不是一帆风顺也是比较耗时的,嵌入式也不例外,要想学好还必需下大力气,还必需坚持。这次的课程设计让我明确了一点:嵌入式开发对于提升我们的系统学问有很大的帮助,尤其是操作系统的学问。嵌入式 系统开发对于我们的学问面要求特别的广,且要有肯定的深度。这次的课程设计因为是一个有针对性的训练,所以记的会特别坚固

12、。跟平常上课不太一样,平常上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,其中的问题就来了!我很感谢学校特殊是学院老师有实训这样的支配,把我们这一学期学的东西系统的集中的进行训练,让我们深刻明确的体验了一下软件开发的流程!还要感谢给我们实训的楚老师,感觉楚老师实力很强,也很有耐性,即使老师讲了许多遍的问题,我们不会,老师还是会走进我们给我们耐性的指导,还给我们讲一些学习计算机的方法,一些软件开发须要留意的细微环节,让我们知道自己在哪方面不足,须要加强

13、,也让我们了解到哪些须要仔细的学习,那些是重点,不是没有方向的乱学一通,什么也学不好!经过这次的实训,我真真确确的感受到了计算机在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西许多,有时错一步,后面的结果就无法显示,而自己的计算机水平还有待提高,根本检查不出来是哪里出了错!这时候,老师都会耐性的过来帮助我!在平常我们就须要好好的查阅书籍或者上网搜集相关资料去解决问题。 短短两周的课程设计很快结束了,我发觉我对计算机这个专业、对嵌入式技术、对Linux都有了新的相识。通过这次的实训,我了解到,

14、要真真正正的驾驭计算机程序还不是一件简洁简单的事儿,但真正驾驭后,它带给我们的将是无穷的便捷与科技,我喜爱高端便捷的生活。我希望我能做计算机这个万能机器人的主子而不是奴隶,我会努力加油的!感谢学校,感谢老师给我的帮助,让我的思想、技能又上了一个台阶!感谢!加油! 八、设计参考书 1、嵌入式系统接口设计与Linux驱动程序开发 2、ARM9嵌入式LINUX系统构建与应用 4、MiniGUI编程手册 5、Linux应用程序编程 九、附件(程序) #include #include /*包括 MiniGUI 常用的宏以及数据类型的定义*/ #include /*包含了全局的和通用的接口函数以及某些杂

15、项函数的定义*/ #include /*包含了 MiniGUI 绘图函数的接口定义*/ #include /*包含了 libminigui 中全部内建控件的接口定义*/ #include #include #include /*包含了很多UNIX系统服务的函数原型*/ #include /*供应对I/O限制的函数*/ #define ID_LED1 101 /*定义各个控件与定时器的ID号*/ #define ID_LED2 102 #define ID_LED3 103 #define ID_LED4 104 #define ID_TEXT1 105 #define ID_TEXT2 106

16、 #define ID_START 107 #define ID_STOP 108 #define ID_COMBOBOX 109 #define ID_TIMER 110 static int a,b,c,d=0; /*定义LED灯的初始值*/ static int fd_led; /*定义文件描述符*/ HWND hMainWnd; /*定义主窗口句柄*/ static void draw_circular(HWND hdig,int x,int y,int r,int which) /*自定义一个画圆函数,x、y、r、which分别表示圆心坐标、半径、颜色*/ HDC hdc; /*定义

17、设备上下文句柄*/ int color; color=(which=0)?PIXEL_green:PIXEL_red); hdc=BeginPaint(hdig); /*获得设备上下文句柄*/ SetBrushColor(hdc,color); /*设置画刷颜色*/ FillCircle(hdc,x,y,r); /*调用园填充函数*/ EndPaint(hdig,hdc); /*释放设备上下文句柄*/ static DLGTEMPLATE DlgInitProgre= /*定义对话框模板.用static类型数据,使该数据的定义只在所在文件中有效,以免因为名字空间污染造成潜在的编译或连接错误*/

18、 WS_BORDER|WS_CAPTION, /*对话框风格,WS_BORDER创建有边框的窗口 ,WS_CAPTION创建含标题栏的主窗口*/ WS_EX_NONE, /*对话框扩展风格,WS_EX_NONE表示无扩展风格*/ 0,0,800,480, /*对话框位置,左上角坐标(0,0),800、480分别为宽和高*/ MY_LED_CONTROL, /*对话框标题*/ 0, /*对话框图标*/ 0, /*对话框菜单*/ 9, /*对话框中控件个数。这个必需要匹配*/ NULL, /*pointer to control array*/ 0 /*附加值*/ ; static CTRLDAT

19、A CtrlInitData= /*控件数组*/ static, /*控件类型*/ WS_VISIBLE|SS_SIMPLE, /*控件风格,WS_VISIBLE创建初始可见的窗口,SS_SIMPLE显示单行文本*/ 100,270,150,40, /*控件位置*/ ID_TEXT1, /*控件ID*/ Please input frequency, /*控件内容*/ 0, /*附加值*/ WS_EX_NONE /*控件扩展风格*/ , 14 static, WS_VISIBLE|SS_SIMPLE, 605,270,150,40, ID_TEXT2, HZ, 0, WS_EX_NONE ,

20、button, WS_VISIBLE|WS_TABSTOP, 135,160,80,60, ID_LED1, LED1, 0, WS_EX_NONE , button, WS_VISIBLE|WS_TABSTOP, 285,160,80,60, ID_LED2, LED2, 0, WS_EX_NONE , button, WS_VISIBLE|WS_TABSTOP, 435,160,80,60, ID_LED3, LED3, 0, /*WS_TABSTOP支持Tab键*/ WS_EX_NONE , button, WS_VISIBLE|WS_TABSTOP, 585,160,80,60, ID

21、_LED4, LED4, 0, WS_EX_NONE , button, WS_VISIBLE|WS_TABSTOP, 285,360,80,60, ID_START, START, 0, WS_EX_NONE , button, WS_VISIBLE|WS_TABSTOP, 435,360,80,60, ID_STOP, STOP, 0, WS_EX_NONE , CTRL_COMBOBOX, WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP, /*CBS_AUTOSPIN创建旋钮数字框,CBS_AUTOLOOP框中的数字将自动循 环显示*/ 4

22、35,270,80,40, ID_COMBOBOX, 0, /*旋钮数字框初始值*/ 0, WS_EX_NONE ; static int DialogBoxProc(HWND hWnd, int meage, WPARAM wParam, LPARAM lParam) /*对话框过程函数,用来接收和处理全部发送到该窗口的消息*/ int number; /*用来存从旋钮数字框获得的数值*/ static int t=0; int num; /*存放定时时间*/ switch(meage) case MSG_INITDIALOG: /*用户在定义自己的对话框回调函数时,须要处理 MSG_INI

23、TDIALOG消息,该消息是在 MiniGUI依据对话框模板建立对话框以及 控件之后 ,发送到对话框回调函数的 。*/ SendDlgItemMeage(hWnd, ID_COMBOBOX, CB_SETSPINRANGE, 0, 10000); /*设置旋钮数字框的最大小值*/ return 1; case MSG_PAINT:/*重绘消息*/ draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWnd,475,90,30,1); draw_circular(hWnd,625,90,

24、30,1); printf(*init draw_circular*n); case MSG_TIMER:t+; /*定时器消息,这里完成LED灯的闪耀*/ if(t%2!=0) ioctl(fd_led, 0,0); ioctl(fd_led, 0, 1); ioctl(fd_led, 0, 2); ioctl(fd_led, 0, 3); printf(*time red*n); draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWnd,475,90,30,1); draw_ci

25、rcular(hWnd,625,90,30,1); break; else ioctl(fd_led, 1,0); ioctl(fd_led, 1, 1); ioctl(fd_led, 1, 2); ioctl(fd_led, 1, 3); printf(*time green*n); draw_circular(hWnd,175,90,30,0); draw_circular(hWnd,325,90,30,0); draw_circular(hWnd,475,90,30,0); draw_circular(hWnd,625,90,30,0); break; case MSG_COMMAND:

26、 /*击键消息*/ switch (wParam) case ID_LED1:a+; /*限制LED灯亮暗*/ if(a%2!=0) ioctl(fd_led,0,0); draw_circular(hWnd,175,90,30,1); else / ioctl(fd_led,1,0); draw_circular(hWnd,175,90,30,0); printf(*led1*n); break; case ID_LED2:b+; if(b%2!=0) ioctl(fd_led,0,1); draw_circular(hWnd,325,90,30,1); else ioctl(fd_led,

27、1,1); draw_circular(hWnd,325,90,30,0); printf(*led2*n); break; case ID_LED3:c+; if(c%2!=0) ioctl(fd_led,0,2); draw_circular(hWnd,475,90,30,1); else ioctl(fd_led,1,2); draw_circular(hWnd,475,90,30,0); printf(*led3*n); break; case ID_LED4:d+; if(d%2!=0) ioctl(fd_led,0,3); draw_circular(hWnd,625,90,30,

28、1); printf(*led33*n); else ioctl(fd_led,1,3); draw_circular(hWnd,625,90,30,0 ); printf(*led4*n); break; case ID_START:printf(*start1*n); number=SendMeage(GetDlgItem(hWnd,ID_COMBOBOX), CB_GETSPINVALUE, 0, 0);/*获得旋钮数字框的数值*/ printf(*%d*n,number); printf(*start2*n); if(number!=0) printf(*start3*n); num=

29、(int)(1000*(1.0/number); /*将频率转换为时间*/ printf(*start4*n); else printf(*start5*n); num=1000; printf(*start6*n); printf(*start7*n); printf(*start8*n); SetTimer(hWnd,ID_TIMER,num); /*创建定时器,时间为num*10ms*/ printf(*SetTimer OK*n); SendMeage(hWnd,BM_CLICK,0,0); /*发送点击信息*/ printf(*SendMeage OK*n); /for(i=0;i+

30、;i /*当时用for循环时无法进入循环,或许是因为消息本身有循环机制,用for循环太多或许冲突,所以后来用了定时器*/ / / printf(*%d*n,i); / ioctl(fd_led, 1,0); / ioctl(fd_led, 1, 1); / ioctl(fd_led, 1, 2); / ioctl(fd_led, 1, 3); / draw_circular(hWnd,175,90,30,0); / draw_circular(hWnd,325,90,30,0); / draw_circular(hWnd,475,90,30,0); / draw_circular(hWnd,6

31、25,90,30,0); printf(*start9*n); / usleep(number); /usleep(num); / ioctl(fd_led, 0,0); / ioctl(fd_led, 0, 1); / ioctl(fd_led,0, 2); / ioctl(fd_led, 0, 3); / draw_circular(hWnd,175,90,30,1); 21 / draw_circular(hWnd,325,90,30,1); / draw_circular(hWnd,475,90,30,1); / draw_circular(hWnd,625,90,30,1); / p

32、rintf(*start10*n); /usleep(number); /usleep(num); / printf(*start*n); break; case ID_STOP: KillTimer(hWnd,ID_TIMER);/*关闭定时器。下面的表示灯灭*/ ioctl(fd_led, 0,0); ioctl(fd_led, 0, 1); ioctl(fd_led, 0, 2); ioctl(fd_led, 0, 3); draw_circular(hWnd,175,90,30,1); draw_circular(hWnd,325,90,30,1); draw_circular(hWn

33、d,475,90,30,1); draw_circular(hWnd,625,90,30,1); printf(*stop*n); break; return(DefaultDialogProc(hWnd,meage,wParam,lParam); /*对话框的缺省消息处理由 DefaultDialogProc 函数完成*/ static void InitDialogBox(HWND hWnd) DlgInitProgre.controls=CtrlInitData; 22 /*将对话框模板结构和控件结构数组关联起来*/ DialogBoxIndirectParam(&DlgInitProgre,hWnd,DialogBoxProc,0L);/*创建对话框*/ printf(*create dialog*n); /*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 策划方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁