嵌入式实验心得体会_第1页
嵌入式实验心得体会_第2页
嵌入式实验心得体会_第3页
嵌入式实验心得体会_第4页
嵌入式实验心得体会_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式实验心得体味学期开始,我们开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,不少的概念都比较含糊,等到学期完毕开始做嵌入式课程设计时,真是茫然无从下手,自从拿到设计主题后,我就像热锅上的蚂蚁,一个字“急”。最后实在没有方法,逼着自己去学习,查资料,总算对嵌入式有了浅层理解。嵌入式系统本身是一个相对含糊的定义,一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是“用于控制,监视或者辅助操作机器和设备的装备”。一个典型的桌面Linux系统包括3个主要的软件层——linux内核、C库和应用程序代码。内核是惟一可以彻底控制硬件的层,内核驱动程序代表应用程序与硬件之间发展会话。内核之上是C库,负责把POSIXAPI转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。在了解了根抵知识之后,我开始发展上机操作,固然,其中遇到不少的难题,不少东西都是第一次接触,又没有别人在旁边指导操作,彻底凭借自己去摸索练习。其中的艰难可想而知。然而坚持就是胜利,牙一咬眼一闭坚持做下去,而通过本次实验,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,惟独真正下功夫去学习,才干有收获,里面大牛们的恭敬。嵌入式的调试是非常麻烦的,很耗时。虽然有gdbserver这种工具,但是你用的开辟工具链中不一定包括它,而且就算用上了调试仍然是很花时间的。所以要是不想天天通宵调程序呢,那就要时时以编写无错程序为目标。.了解一点编译知识。这对编写高性能程序很有匡助。.学习设计模式。设计模式普通在高级语言中讨论较多,但是好东西应该大家一起分享。学习设计模式对提高我们的设计能力非常有匡助。用C语言也可以实现一些模式思想,例如我们常用的回调函数,就可看做是Command模式的C语言版本。.要有前瞻性,要积极学习新技术。目前的嵌入式开辟普通都是将PC应用加以剪裁,移植到嵌入式系统中。但是随着通信技术的开展,IPv6的广泛应用,设备上网是大势所趋。许多新技术有可能在嵌入式领域率先应用。把握住这个趋势,嵌入式程序员大有可为。现在不少公司招程序员要求有嵌入式开辟经历,其实本质上嵌入式开辟和我们寻常的开辟没什么不同,只是要求严格一点。我写下这些希翼对学习嵌入式开辟的朋友们有所匡助。正所谓“一份耕耘,一份收获。”没有付出,何谈回报呢?再者,通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的缺乏,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。固然,在这其中,我也发现自己的许多缺乏之处,由于学期伊始我没有好好学习,才落到如此地步,这也可以说是一个教训吧!我相信在以后的学习工作中,我一定会端正自己的学习态度,一丝不苟的去对待每一件事。惟独做好足够的准备,才干事半功倍!Uboot是1999年由德国DENX软件工程中心的WolfgangDenk发起的,全称UniversalBootloadero具有如下特点:★支持多种硬件构架:包括ARM、x86、PPC、MIPS、m68k>NIOS、Blackfin★支持多种操作系统:包括Linux、VxWorks.NETBSD、QNX、RTEMS>ARTOS>LynxOS★支持多达216种以上的开辟板★开放源代码,遵循GPL条款★易于移植、调试1、进一步了解Uboot的启动流程2、进一步分析Uboot的启动过程3、实现Uboot的移植分析Uboot的启动流程,实现Uboot的移植1、Uboot的启动流程、分析U-Boot的启动过程可以分成3个阶段。首先在Flash中运行汇编程序,将Flash中的启动代码部份复制到SDRAM中,同时创造环境准备运行C程序;然后在SDRAM中执行,对硬件发展初始化;最后设置内核参数的标记列表,复制镜像文件,进入内核的入口函数。1)程序首先在Flash中运行CPU入口函数/cpu/arm920t/start.so详细工作包括:设置异常的入口地址和异常处理函数;配置PLLCON存放器,确定系统的主频;屏蔽看门狗和中断;初始化I/O存放器;关闭MMU功能;初始化存储器空间,设置刷新频率;将U-Boot的内容复制到SDRAM中;设置堆栈的大小,Idrpc,startarmbootoboard/yqliu2410中config,mk文件(TEXTBASE=0x31F00000)用于设置程序编译连接的起始地址,在程序中要特殊注意与地址相关指令的使用。当程序在Flash中运行时,执行程序跳转时必须要使用跳转指令,而不能使用绝对地址的跳转(即直接对PC操作)。如果使用绝对地址,那末,程序的取指是相对于当前PC位置向前或者向后的32MB空间内,而不会跳入SDRAM中。2)程序跳转到SDRAM中执行/libarm/board.c中的startarmboot()函数。该函数将完成如下工作:设置通用端口;设置处理器类型;设置启动参数地址;envinit:设置环境变量,初始化环境;initbaudrate:设置串口的波特率;serialinit:设置串口的工作方式;flashinit:设置ID号、每一个分页的起始地址等信息,将信息送到相应的构造体中;draminit:设置SDRAM的起始地址和大小;envrelocate:将环境变量的地址送到全局变量构造体中;enableinterrupts:开启中断;*mainloop:该函数主要用于设置延时等待,从而确定目标板是进入下载操作模式还是下载镜像文件启动内核。在设定的延时时间范围内,目标板将在串口等待输入命令,当目标板接到正确的命令后,系统进入下载模式。在延时时间到达后,如果没有接收到相关命令系统将自动进入装载模式。3)装载模式下系统将执行dobootmlinux()函数,0x30008000是内核在SDRAM中的起始地址;0x30800000是ramdisk在SDRAM中的起始地址;0x40000是内核在Flash中的位置,0x100000是数据块的大小;0x140000是ramdisk在FLASH中的位置,0x440000是数据块的大小。系统调用memcpyO函数将内核从flash和ramdisk复制到SDRAM中,详细如下:memcpy((void*)0x30008000,(void*)0x40000,0x100000);〃复制数据块memcpy((void*)0x30800000,(void*)0x140000,0x440000);〃复制数据块通常,将内核参数传递给Linux操作系统有两种方法:采用structparamstruct构造体或者标记列表。一个合法的标记列表开始于ATAGC0RE,完毕于ATAGNONE。ATAGCORE可以为空,一个空的ATAGCORE的size字段设为“2”(0x00000002)。ATAGNONE的size字段必须设为“0”o标记列表可以有任意多的标记(tag)。在嵌入式Linux系统中,通常由U-Boot设置的启动参数有:ATAGCORE、ATAGMEM、ATAGCMDLINE、ATAGRAMDISK.ATAGINITRD等。在本系统中,传递参数时分别调用了以下tag:setupstarttag(bd);〃标记列表开始setupmemorytags(bd);〃设置内存的起始位置和大小setupmandlinetag(bd,mandline);/*Linux内核在启动时可以命令行参数的形式来接收信息,利用这一点可以向内核提供那些内核不能检测的硬件参数信息,或者重载(override)内核检测到的信息。setupramdisktag(bd);〃表示内核解压后ramdisk的大小setupinitrdtag(bd,initrdstart,initrdend);〃设置ramdisk的大小和物理起始地址setupendtag(bd);〃标记列表完毕其中bdt*bd=gd->bd是指向bdt构造体的指针,在该构造体中存放了关于开辟板配置的根本信息。系统采用以下代码来进入内核函数:theKernel=(void(*)(int,int))ntohl(hdr->ihep);hdr是imageheadert类型的构造体,hdr-〉ihep指向内核的第一条指令地址,即Linux操作系统下的/kernel/arch/arm/boot/pressed/head.S汇编程序。theKernel()函数调用应该不会返回,如果该调用返回,那末说明出错。2、Uboot的移植步骤1)建立板级支持包根据S3C2410处理器,在board目录下依照smdk2410目录配置,创立自己开辟板的板级资源目录,相应的在include/configs目录下创立头文件。修改规那末文件Makfile,添加开辟板编译参数支持2)添加外设支持添加存储设备支持:NANDFLASH启动支持添加网络设备支持:DM9000A添加USB接口支持添加文件系统支持3)设置环境变量U-Boot中提供了丰富的命令,smdk2410开辟板配置了一部份命令,我们需要通过相应的环境变量为自己的开辟板增加一些命令:?#defineCONFIGCMDNAND?#defineCONFIGCMDPING?ttdefineCONFIGCMDDLF?ttdefineCONFIGCMDENV?ttdefineCONFIGCMDNET?ftdefineCONFIGBOOTDELAY3?ttdefineCFGLOADADDR0x30008000?ttdefineCFGTFTPLOADADDR0x300080009 4)编译U-boot配置开辟板:#makeuptech2410classconfigConfiguringforuptech2410classboard.从实习到现在搞嵌入式开辟快一年了,蓦然回首好似一年过得挺快,挺顺利的。细细品味,发现这一年还是有不少值得回顾和的东西。至少这一年看书挺多,大概二十几本,固然和那些一年看一百多本书的人没法比,但是我已经超越了自己。这是我大学毕业的第一年,初次走上社会,很想一展身手,可是.....其实也不用可是了,和不少朋友一样碰了不少钉子,现在我和老板的关系就挺普通的,只是我性格还不错。呵呵”,做优秀员工看来还得慢慢学。今年最大的收获就是做了一个半工程,是在uClinux下面跑的。半个是SNMP-Agent的实现,因为我去的时候snmpd已经跑起来了,我只是实现部份管理功能;一个是基于Web的管理系统,使公司的主打产品微波通信设备上网。这个工程是我一手筹画,一手实现(界面设计是一位女同事,很优秀的程序员),从中学到的东西也最多,感情不可谓不深。SNMP即简单网络管理协议,其实一点都不简单。在我所知的网络协议里面,它仅仅比0SI的CMIP简单一点,而CMIP直到现在还没得到广泛应用。我们能够实现SNMP-Agent不能不感谢CarnegieMellon大学的ucd-snmp软件包。它使得开辟人员专注于实现对特定设备的管理功能。我在工程中的工作主要是扩展MIB,实现相应的管理功能以及网络功能的扩展。我们公司的MIB库比较庞大,但是程序运行还是挺快的。因为ucd-snmp软件包中大量使用回调函数,而且它将MIB树以二叉树形式表示,但是每一个结点不是单个的MIB结点,而是一个表,包括了多个结点。回调函数和两层表示法的使用是操作快速的主要因素。基于Web的管理系统我原本是打算在设备外实现SNMP-Manager的功能,因为设备中已经嵌入了Agento这样管理人员可以在世界各地通过公司的管理平台,实现对所有设备的管理。但是老板想在设备中嵌入一个管理系统,可以通过管理单个设备就行。呵呵〜〜,这样工作又轻松了一点,就按老板的意思做了。我用的效劳器是BOA,它比现在市场占有率第一的Apache速度要快。目前还只支持CGI,我就用C写CGI程序,古老了点。但是在开辟过程中感觉用CGI比用现在流行的ASP,JSP要爽,可以随心所欲,哈哈而且这也是用 语言的优点。CGI程序很简单,它的输入就是标准输入,它的输出就是标准输出。BOA在uClinux上面跑总要出点问题的,出问题好,出了问题我就能找到问题,一来一往,我对socket编程,I/O多路等编程技术了解也就越来越深了。在Linux下面搞了一年,不爱上Linux都难,个人认为软件开发人员在Linux下面进步是最快的。那末多优秀的开源代码供我们研究,宛如每天与世界上最优秀的程序员打交道,进步于不经意间。哈哈正所谓“熟读唐诗三百首,不会作诗也会吟”。GCC编译器的优秀不用多说,我觉得写Makefile也是很件开心的事。不推荐程序员搞开辟都用IDE,隔靴捎痒很不爽。但是Linux缺点也很明显,听歌、看碟、玩游戏不如Windowso恰巧公司的电脑没音箱,干脆我就懒得用Windows了。用Linux而不讲开源是不道德的,我们程序员享受着开源的好处,自然也要为开源做点奉献。我开辟的所有软件都开源,但是我也有个“怪癖”:不喜欢别人在我代码未完成的时候问我要源代码。.不要玩Linuxo这一点主要是对像我这样在Linux下面开辟的程序员来说的。因为Linux对程序员的吸引力很大,但它下面可以直接用的软件还是比较少。于是我们总想到网上找一些开源的软件装到我们的机器上,从无到有让人很有成就感的,呵呵〜二要是装上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论