ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:535.77KB ,
资源ID:16915415      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16915415.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统工程设计实训.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统工程设计实训.docx

1、嵌入式系统工程设计实训苏 州 市 职 业 大 学实习(实训)报告 名称 嵌入式系统工程设计实训 2012年12月31日至2013年1月11日共2周院 系 电子系 班 级 10电子信息1 姓 名 孔中宝 系主任 张红兵 教研室主任 陆春妹 指导教师 史斌斌 苏 州 市 职 业 大 学实习(实训)任务书 课程名称: 嵌入式系统工程设计实训 起讫时间: 院 系: 电子信息工程系 班级: 10电子信息(1) 指导教师: 史斌斌 系 主 任: 张红兵 一、实习(实训)目的和要求1、建立交叉编译环境;2、了解基于嵌入式Web的CGI编程方法;3、掌握嵌入式驱动程序编程方法;4、完成应用程序开发后书写设计文

2、档,整理实训报告。二、实习(实训)内容“基于嵌入式WEB的远程LED显示系统开发”主要包含以下两个内容:(1)嵌入式WEB设计:设计一个Web页面,将目标板作为服务器,宿主机作为客户端,设计菜单栏,实现对目标板的控制。(2)远程LED显示:(参照教材P171)驱动目标板的LED模块工作,通过接收宿主机的指令控制显示。三、实习(实训)方式 集中 分散 校内 校外四、实习(实训)具体安排1、实训任务布置和讲解 4课时2、交叉编译环境搭建;各组确定主题 4课时3、系统程序开发 30课时4、讨论与总结 2课时5、编写实训报告 6课时6、答辩 2课时五、实习(实训)报告内容(有指导书的可省略)1、实训报

3、告封面2、实训任务书3、目录4、正文(包括交叉编译环境、程序分模块介绍、调试过程、总结、参考文献)第一章:绪论嵌入式系统和Linux的有机结合,成为后PC时代计算机最普遍的应用形式。嵌入式Linux不仅继承了Linux源代码开发、内核稳定高效、软件丰富、强大的网络支持功能、优秀的开发工具等优势,而且还具备支持广泛的处理器结构和硬件平台占用空间小、成本低等优点。嵌入式Linux技术在中国有巨大的发展潜力和市场需要。有数据显示,未来两年里,在计算机、消费电子、通信、汽车电子、工业控制、军事国防这六大主要应用领域,嵌入式Linux产品将达到60亿的市场规模。嵌入式Linux属于一个交叉学科,涵盖了微

4、电子技术、电子信息技术、计算机软件和硬件等多项技术领域的应用。另外嵌入式Linux需要相应的嵌入式开发板和软件,还需要有经验的人进行指导开发,目前国内大部分高校都很难达到这种要求,这也造成了目前国内嵌入式Linux开发人才极其缺乏的局面。这次的课程设计要求我们对嵌入式系统基础知识、嵌入式系统开发过程、ARM体系机构和嵌入式系统的BootLoad开发有所了解以及要知道如何创建嵌入式系统开发环境、如何在ARM平台上移植Linux系统、Linux设备驱动程序开发、USB设备驱动程序开发、嵌入式Linux网络编程和图形用户接口开发。这次实训所用的硬件平台是锐极RJARM9-EDU教学实验系统,所有的程

5、序都是基于该平台下精心设计的实验,试验程序也可移植到其它ARM平台上。第二章:交叉编译环境 嵌入式Linux的开发环境 嵌入式Linux开发使用交叉开发的模式,即在PC机(host)上编译连接程序,下载到目标机(target)上运行使用。 Linux开发嵌入式应用,可以在自己的PC机上装一套Linux,例如,Red Hat Linux。可以用Linux中的X Windows(xterm)开若干个窗口,用于编译、下载、调试等;可以使用Linux中的emacs做文本编辑。Windows中有的软件在Linux中几乎都有。多数人对Linux环境和Linux中的应用程序不熟悉,宁愿用PC上基于Windo

6、ws的操作系统,此时可以在Windows环境下装上Cygwin软件。GNU中的Cygwin是在Windows下运行Linux的自由软件,但我们发现,Cygwin的兼容性似乎不太好,在有点PC机上能装得上,有的PC机上装不上。Cygwin的安装过程需要三个小时,有时装到一半出现问题很不好处理。据说,VMWare的Windows版本也可以在Windows环境下开出Linux的窗口,但VMWare不是自由软件。我们采用的办法是用一台PC机运行Linux作为服务器。开发小组中每个成员都可以通过局域网用Telent登录到这台Linux服务器上去,被开发的目标板也挂在网上。在服务器的Linux环境下,用G

7、NU gcc编译生成目标代码,再用FTP传回到自己的PC机上,然后通过串行口或网络下载到目标机上。JTAC工具主要用于硬件调试。因为JTAC工具的支持软件也是Linux下的自由软件,故JTAC工具只能接在Linux服务器的并口上。硬件调试完成后,可以把Debug程序写入Flash,然后就不需要JTAC工具了。验证开发环境是否建立好了需要一块目标板。在开发环境建立起来之前,贸然设计自己的硬件,难度较大。可以用商家提供的评估板作为目标板,先把开发环境建立起来。可以通过用GNU gcc编译uClinux然后下载到目标板上运行的办法来熟悉Linux下GNU gcc的开发环境,检验开发环境是否已建立好。

8、 交叉编译交叉编译(cross-compilation)是指,在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在 Windows 平台上,可使用 Visual C+ 开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 nati

9、ve compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是 16 到 32 MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下,在 ARM 平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储控件足够的主机平台上(比如 PC 上)编译出针

10、对其他平台的可执行程序。交叉编译是嵌入式开发过程中的一项重要技术,它的主要特征是某机器中执行的程序代码不是在本机编译生成,而是由另一台机器编译生成。一般把前者称为目标机,后者称为宿主机。采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工作转移到高性能的主机中进行。因此硬件需要目标板和PC机,软件上需要与目标板的平台兼容的编译工具包下载并且安装,编译目标。第三章:程序分模块介绍基于嵌入式WEB的远程LED显示系统开发”主要包含以下两个内容:(1)嵌入式WEB设计:设计一个Web页面,将目标板作为服务器,宿主机作为客户端,设计菜单栏,实现对目标板的控制

11、。(2)远程LED显示:(参照教材P171)驱动目标板的LED模块工作,通过接收宿主机的指令控制显示。嵌入式WEB设计1、在宿主机上修改 EXP2/APP/HTTPD/HTML目录下的文件 添加LED左栏目选项,具体操作如下图:图 2、将修改好了的覆盖到目标板的 /HOME/HTTPD目录下。在目标板上的具体命令如下: 宿主机的IP: 子网掩码: minicom ifconfig eth0 netmask mkdir nfs mount /nfs cd nfs/expriments/EXP2/app/httpd/html cp /home/httpd3、打开WEB,在MINICOM界面下,控制

12、目标板,进入刚才MOUNT的目录。在/RJARM9-EDU/experiments/EXP2/app/boa/src目录下,拷贝执行文件boa到目标板的/bin目录下。在/RJARM9-EDU/experiments/EXP2/app/目录下,拷贝httpd到目标板的/home目录下(有的home目录下已经有文件)。具体命令操作如下: 宿主机的IP: 子网掩码: minicom ifconfig eth0 netmask mkdir nfs mount /nfs cd /nfs/experiments/EXP2/app/boa/src cp boa /bincd /cd /nfs/experi

13、ments/EXP2/app cp r httpd /homecd /cd bin./boa远程LED显示在/EXP2/APP/CGI目录下修改如下三个文件:1、 添加四个函数命名及对应FLAG如下(具体程序见附录1):Ledshow 对应FLAG=200Led_123 对应FLAG=202Led_888 对应FLAG=204Led_hello 对应FLAG=206图2、 添加四个函数对应的头文件声明(具体程序见附录2)图3、 中定义四个函数(具体程序见附录3)Ledshow 用于显示LED页面,用HTML语言实现,需要添加三个按钮Led_123 参考LED显示程序,显示123456Led_8

14、88 参考LED显示程序,显示888888Led_hello 参考LED显示程序,显示HELLO!图第四章:调试过程1、在宿主机/EXP2/APP/CGI下修改相应程序,修改后MAKE生成新的文件,在目标板上进入mount的对应宿主机目录,将新生成的文件拷贝到目标板的/home/httpd/cgi-bin目录下替换原文件,然后目标板执行./boa,具体命令如下:宿主机的IP: 子网掩码: minicom ifconfig eth0 netmask mkdir nfs mount /nfs cd /nfs/experiments/EXP2/app/cgi cp /home/httpd/cgi-b

15、in cd / cd /nfs/experiments/EXP2/app/boa/src cp boa /bincd /cd /nfs/experiments/EXP2/app cp r httpd /homecd /cd bin./boa2、在PC机WINXP环境下打开浏览器 访问的目标板地址:图第五章:调试结果进入LED显示页面后出现三个按键1、按下键1“show:123456”即在LED显示123456图2、按下键2“show:888888”即在LED显示888888图按下键3“show:HELLO”即在LED显示HELLO!图第六章:总结课程设计的日子总是过得很快,眨眼间又到了星期四。

16、这次课程设计的目的是在Windows下通过WEB页面控制Linux嵌入式下的目标板工作,使之能通过LED显示数字。课程设计的主要工作就是编写程序代码,由于以前课上做过类似的实验,所以我们积累有一定的程序和经验,工作量相对来说不是太大。在实验的两天是时间里,我们小组主要修改了一个WEB页面程序,还有一个目标板运行用的工程程序。不得不说,每一次修的程序都有很多这样那样的漏洞,编译一下,错误真多,然后我们就在那边一点点修改程序中的各种错误和漏洞。有些错误很不好找,但集思广益,人多力量大,最后还是让我们给发现了,例如:同学在打字的时候把“.”打成了“,”我们看了半天才看出来。当然,因为有一段时间没有接

17、触嵌入式,所以对Linux的一些程序指令也不大熟悉了,给我们造成了一定的困扰。虽然编写和调试程序确实不是个太让人兴奋的活计,但是最终克服各种困难把程序给改出来,并能在硬件上运行着实很让人欣慰,有一种满足和成就感。这次课程设计给我最大的感受就是调试程序要比编写程序耗费更多的精力,调试程序需要的是细心,更多的是耐心,适当的时候也要学会放松自己,休息是为了更好的改程序。还有,团队合作永远都是完成任务的捷径。 参考文献【1】杨波 ARM&Linux嵌入式系统开发详解 北京 航空航天大学出版社 2007年附录1()#include #include #include #include int main(

18、int argc,char* argv) char *querystring; struct splitback string,tmp; int i; int flag = 1; flag = strcmp(argv0,/home/httpd/cgi-bin/);/get html var and split it querystring=getenv(QUERY_STRING); string=splitstring(querystring,&); for(i=0;i;i+) tmp=splitstringi,=); snprintfi,100,%s,1); / decide which f

19、unction to use if(strcmp0,8)=0) changerootpass(); else if(strcmp0,7)=0) show_changerootpass();else if(strcmp0,200)=0) Ledshow();else if(strcmp0,202)=0) Led_123();else if(strcmp0,204)=0) Led_888();else if(strcmp0,206)=0) Led_Hello(); else printf(System error!); return(0);附录2()define _MYHDR_H_#include

20、 #include #include #include #include #include #include #include extern int accesstime();extern int Ledshow();extern int Led_123();extern int Led_888();extern int Led_Hello();extern int saveconf();extern int configuration1();#endif附录3()#include #include #include #include #include #include #include #i

21、nclude #include /#include #include #include #include #include /#include #include #include#include#include#include#define NOKEY 0#define USER_MAX 256#define IP_COUNT_MAX 100#define PORT_COUNT_MAX 100#define ONLINE_MAX 100#define MAX_PORTFW 256int Ledshow()printf(Content-type:text/htmlnn); printf(Leds

22、howWEB-LED-1 SHOW!PLS CLICK TO SHOW主页面显示  主页面显示  主页面显示  ); return 0;#wpqint Led_123()char ledval7;int led_fd,count;char ret7;int select=0;const char Dtable10=0xDE,0x50,0x9D,0x5D,0x53,0x4F,0xCF,0x58,0xDF; ledval1=6; ledval2=5; ledval3=4; ledval4=3; ledval5=2; ledval6=1;led_fd

23、= open(/dev/led,O_RDWR);if (led_fd=0)printf(open led device errorn);return 0;ret0=NOKEY;for (count=1;count7;count+)retcount=Dtableledvalcount;ioctl(led_fd,IOCTRL_LED_1);count=write(led_fd,ret+1,1);if (count!=1)printf(write device led errorn);return 0;ioctl(led_fd,IOCTRL_LED_2);count=write(led_fd,ret

24、+2,1);ioctl(led_fd,IOCTRL_LED_3);count=write(led_fd,ret+3,1);ioctl(led_fd,IOCTRL_LED_4);count=write(led_fd,ret+4,1);ioctl(led_fd,IOCTRL_LED_5);count=write(led_fd,ret+5,1);ioctl(led_fd,IOCTRL_LED_6);count=write(led_fd,ret+6,1);close(led_fd);save();Ledshow();return 0;#wpqint Led_888()char ledval7;int

25、led_fd,count;char ret7;int select=0;const char Dtable10=0xDE,0x50,0x9D,0x5D,0x53,0x4F,0xCF,0x58,0xDF; ledval1=8; ledval2=8; ledval3=8; ledval4=8; ledval5=8; ledval6=8;led_fd = open(/dev/led,O_RDWR);if (led_fd=0)printf(open led device errorn);return 0;ret0=NOKEY;for (count=1;count7;count+)retcount=Dt

26、ableledvalcount;ioctl(led_fd,IOCTRL_LED_1);count=write(led_fd,ret+1,1);if (count!=1)printf(write device led errorn);return 0;ioctl(led_fd,IOCTRL_LED_2);count=write(led_fd,ret+2,1);ioctl(led_fd,IOCTRL_LED_3);count=write(led_fd,ret+3,1);ioctl(led_fd,IOCTRL_LED_4);count=write(led_fd,ret+4,1);ioctl(led_fd,IOCTRL_LED_5);count=write(led_fd,ret+5,1);ioctl(led_fd,IOCTRL_LED_6);count=write(led_fd,ret+6,1);close(led_fd);save();Ledshow();return 0;#wpqint Led_Hello()char ledval7;int led_fd,count;char ret7;int select=0;const char Dtable10=0xD3,0x8F,0x86,0x86,0xDE,0x

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2