电子工艺
实 习 报 告
班 级
学 号
姓 名
同组人
指导教师
20##年 1 月 13 日
一、嵌入式的概述:
随着信息化技术的发展和数字化产品的普及,以计算机技术、芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用的热点,通信、计算机、消费电子技术(3C)合一的趋势正在逐步形成,无所不在的网络和无所不在的计算(everything connecting, everywhere computing)正在将人类带入一个崭新的信息社会。
二、实习目的
学习和了解了嵌入式在生活中的重要作用和发展过程,熟练掌握ARM硬件体系结构,熟悉linux下的嵌入式编程流程,积累自己的软件编写经验,能够参与并实现一个真实和完整的嵌入式项目,为今后的学习和将从事的技术工作打下坚实的基础
三、实习任务
第一阶段Linux操作和编程基础
主要介绍Linux的基本命令和基础编程知识,包括Linux的文件操作和目录操作命令,VI编辑器,GCC编译器,GDB调试器和Make项目管理工具等知识。
第二阶段 嵌入式C语言编程基础
主要介绍在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。
第三阶段Linux上C强化编程训练
主要包括整数算法训练,递归和栈编程训练,位操作训练,指针训练,字符串训练和常用C库函数编程接口实践,强化学员对Linux下基本编程开发的理解和编码调试的能力。
第四阶段 Linux环境高级编程及项目开发编程实践
主要包括系统编程(信号/系统调用/管道/FIFO/消息队列/共享内存等),文件I/O编程(文件描述符/文件读写接口/原子操作/阻塞与非阻塞IO等,多任务和多线程编程(进程标识/ 用户标识/fork与vfork/多线程概念/线程同步等),网络编程(网络基本概念/套接口编程/网络字节次序/Client/Server结构/UDP编程);掌握Linux下Socket编程的开发流程,熟悉网络编程的调用接口函数和相关数据结构,使学员初步具备在Linux上进行系统编程开发的能力。同时综合之前所学内容和编程技术,以小组为单位进行一个团队合作项目的开发,考核内容包括文件I/O编程,多线程编程,网络编程和项目文档编写。
第五阶段 嵌入式处理器体系结构及编程实践
主要介绍ARM体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、汇编语言以及C\C++和汇编语言的混合编程等知识。同时结合ARM嵌入式开发板硬件设计原理和基本硬件设计流程,分析各种外设的工作原理和驱动机制,并自己动手实践完成一个ARM开发板上的编程大作业。
第六阶段 嵌入式Linux开发基础及高级应用
主要介绍嵌入式Linux开发应用程序的基本流程和知识,包括嵌入式Linux基本概念和开发流程、Bootloader工作原理、内核裁减配置和交叉编译、根文件系统制作、网络编程以及图形界面和数据库开发等知识。同时独立完成一个基于嵌入式Linux GUI的应用编程大作业。
第七阶段 嵌入式 Linux驱动理论及驱动程序开发实践
主要介绍嵌入式Linux上驱动程序开发规范,包括设备驱动程序概念、字符设备驱动程序、块设备与网络设备、网卡驱动以及常用嵌入式设备驱动开发等知识。同时独立实现两种嵌入式设备驱动程序的编写,包括驱动模块的调试和加载以及完整的项目开发文档的编写。
第八阶段 嵌入式Linux项目团队开发实践锻炼
主要包括设计并实现一个真实和完整的嵌入式项目的开发流程,涉及到数据采集、网络通讯、图形用户界面显示以及嵌入式数据库存储系统等多种嵌入式Linux编程技术。要求学员建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业前的职业技能和素质训练做好充分准备。
四、实习内容
1. 嵌入式的历史与现状
虽然嵌入式系统是近几年才开始真正风靡起来的,但事实上嵌入式这个概念却很早就已经存在了,从上个世纪70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统少说也有了近30年的历史。纵观嵌入式系统的发展历程,大致经历了以下四个阶段:
嵌入式系统最初的应用是基于单片机的,大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、导弹等武器装备中,一般没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。这些装置虽然已经初步具备了嵌入式的应用特点,但仅仅只是使用8位的CPU芯片来执行一些单线程的程序,因此严格地说还谈不上"系统"的概念。
这一阶段嵌入式系统的主要特点是:系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。由于这种嵌入式系统使用简便、价格低廉,因而曾经在工业控制领域中得到了非常广泛的应用,但却无法满足现今对执行效率、存储容量都有较高要求的信息家电等场合的需要。
20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI中,制造出面向I/O设计的微控制器,并一举成为嵌入式系统领域中异军突起的新秀。与此同时,嵌入式系统的程序员也开始基于一些简单的"操作系统"开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。
这一阶段嵌入式系统的主要特点是:出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。
20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。
这一阶段嵌入式系统的主要特点是:操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。
21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。目前大多数嵌入式系统还孤立于Internet之外,随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。
信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。目前,嵌入式技术与Internet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显著变化:
1. 新的微处理器层出不穷,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。
2. 嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。
3. 通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。
4. 各类嵌入式Linux操作系统迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与Windows CE、Palm OS等嵌入式操作系统进行有力竞争的局面。
5. 网络化、信息化的要求随着Internet技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。
6. 精简系统内核,优化关键算法,降低功耗和软硬件成本。
7. 提供更加友好的多媒体人机交互界面。
2.体系结构
根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是"控制、监视或者辅助设备、机器和车间运行的装置"(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。一般而言,整个嵌入式系统的体系结构可以分成四个部分:嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件,如图1所示。
图1 嵌入式系统的组成
嵌入式处理器
嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器最大的不同点在于,嵌入式CPU大多工作在为特定用户群所专门设计的系统中,它将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
嵌入式处理器的体系结构经历了从CISC(复杂指令集)至RISC(精简指令集)和Compact RISC的转变,位数则由4位、8位、16位、32位逐步发展到64位。目前常用的嵌入式处理器可分为低端的嵌入式微控制器(Micro Controller Unit,MCU)、中高端的嵌入式微处理器(Embedded Micro Processor Unit,EMPU)、用于计算机通信领域的嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP)和高度集成的嵌入式片上系统(System On Chip,SOC)。
目前几乎每个半导体制造商都生产嵌入式处理器,并且越来越多的公司开始拥有自主的处理器设计部门,据不完全统计,全世界嵌入式处理器已经超过1000多种,流行的体系结构有30多个系列,其中以ARM、PowerPC、MC 68000、MIPS等使用得最为广泛。
在嵌入系统硬件系统中,除了中心控制部件(MCU、DSP、EMPU、SOC)以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备、通信设备和显示设备三类。
存储设备主要用于各类数据的存储,常用的有静态易失型存储器(RAM、SRAM)、动态存储器(DRAM)和非易失型存储器(ROM、EPROM、EEPROM、FLASH)三种,其中FLASH凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。
目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括RS-232接口(串行通信接口)、SPI(串行外围设备接口)、IrDA(红外线接口)、I2C(现场总线)、USB(通用串行总线接口)、Ethernet(以太网接口)等。
由于嵌入式应用场合的特殊性,通常使用的是阴极射线管(CRT)、液晶显示器(LCD)和触摸板(Touch Panel)等外围显示设备。
为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面(GUI)等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理复杂的系统资源,能够对硬件进行抽象,能够提供库函数、驱动程序、开发工具集等。但与通用操作系统相比较,嵌入式操作系统在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。
嵌入式操作系统根据应用场合可以分为两大类:一类是面向消费电子产品的非实时系统,这类设备包括个人数字助理(PDA)、移动电话、机顶盒(STB)等;另一类则是面向控制、通信、医疗等领域的实时操作系统,如WindRiver公司的VxWorks、QNX系统软件公司的QNX等。实时系统(Real Time System)是一种能够在指定或者确定时间内完成系统功能,并且对外部和内部事件在同步或者异步时间内能做出及时响应的系统。在实时系统中,操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关,也就是说,实时系统对逻辑和时序的要求非常严格,如果逻辑和时序控制出现偏差将会产生严重后果。
实时系统主要通过三个性能指标来衡量系统的实时性,即响应时间(Response Time)、生存时间(Survival Time)和吞吐量(Throughput):
实时系统根据响应时间可以分为弱实时系统、一般实时系统和强实时系统三种。弱实时系统在设计时的宗旨是使各个任务运行得越快越好,但没有严格限定某一任务必须在多长时间内完成,弱实时系统更多关注的是程序运行结果的正确与否,以及系统安全性能等其他方面,对任务执行时间的要求相对来讲较为宽松,一般响应时间可以是数十秒或者更长。一般实时系统是弱实时系统和强实时系统的一种折衷,它的响应时间可以在秒的数量级上,广泛应用于消费电子设备中。强实时系统则要求各个任务不仅要保证执行过程和结果的正确性,同时还要保证在限定的时间内完成任务,响应时间通常要求在毫秒甚至微秒的数量级上,这对涉及到医疗、安全、军事的软硬件系统来说是至关重要的。
时限(deadline)是实时系统中的一个重要概念,指的是对任务截止时间的要求,根据时限对系统性能的影响程度,实时系统又可以分为软实时系统(soft real-time-system)和硬实时系统(hard real-time-system)。软实时指的是虽然对系统响应时间有所限定,但如果系统响应时间不能满足要求,并不会导致系统产生致命的错误或者崩溃;硬实时则指的是对系统响应时间有严格的限定,如果系统响应时间不能满足要求,就会引起系统产生致命的错误或者崩溃。如果一个任务在时限到达之时尚未完成,对软实时系统来说还是可以容忍的,最多只会降低系统性能,但对硬实时系统来说则是无法接受的,因为这样带来的后果根本无法预测,甚至可能是灾难性的。在目前实际运用的实时系统中,通常允许软硬两种实时性同时存在,其中一些事件没有时限要求,另外一些事件的时限要求是软实时的,而对系统产生关键影响的那些事件的时限要求则是硬实时的。
五、实习总结
计算机和网络已经全面渗透到日常生活的每一个角落,对于我们没有个人来说,需要的已经不再仅仅是放在桌面上处理文档,进行工业管理和生产控制的计算机“机器”任何一个普通的人都可能拥有从小到大的各种嵌入式技术的电子产品,小到MP3\PDA等微型数字化产品,大到网络家电,智能家电等,各种各样的新型嵌入式系统设备在应用数量上已经远远超过了通用计算机,在工业和服务领域,使用嵌入式技术的数字机床、智能工具、工业机器人、服务机器人、正在逐渐的改变着传统的工业生产和服务方式。而ARM芯片凭借强大的处理能力和极低的功耗,非常适合这些场合。所以现在越来越多的公司在产品选型的时候考虑到使用ARM处理器,从这个角度来说,对于在校大学生来说,如果你掌握了ARM开发技术,对于寻找一份好的工作也十分有利。
学 生 实 习 报 告
实 习 名 称 专业生产实习
院部名称 信息技术学院
专 业 08电子信息工程(2)(本)
班 级 08电子信息工程(2)
学 生 姓 名 王震宇
学 号 0805111005
实 习 地 点 中软国际(无锡)
指 导 教 师 夏兵
实习起止时间:20##年 7月 4日至20##年 7月29日
金陵科技学院教务处制
实习项目名称: LCD驱动开发 实习学时: 4周
同组学生姓名: 崔敏杰 王璇 陈永康 实习地点:中软国际(无锡)
实习日期: 20##年07月04月-07月29日成 绩:
批改教师: 沈维燕 批改时间:
实习报告
前言
中软国际有限公司(中软国际)是根植中国、服务全球的IT服务提供商,致力于为遍及全球的客户提供全面的服务,打造中国智造综合平台。中软国际总部位于北京,在美国、日本、香港以及中国大陆25个主要城市设有35家分子公司或办事处,员工突破10000人。年营业额逾10亿元人民币(2007财年)。20##年和20##年中软国际对欧美软件外包业务位列全国第一(IDC统计数据)。
集团业务涵盖以咨询为驱动的解决方案、以专业化为准则的ITO和BPO外包服务和以人才供链为导向的培训服务,包括咨询服务、软件开发、系统集成、软件测试、软件本地化、企业应用平台建设与维护、IT服务外包以及业务流程外包。
凭借集团的全球分布,中软国际能够充分运用全球资源和自身领先的技术实力帮助客户应对不断快速变化的商业挑战。凭借中软国际在中国市场所拥有的独特领导地位和全球提交能力,除能为客户提供“传统”外包服务及信息解决方案外,还能以其国内、海外市场的互动能力帮助客户在中国或海外开拓新的业务机会。
一、 实习目的
1、掌握嵌入式微处理器的结构与原理
2、熟悉并掌握嵌入式Linux操作系统的操作
3、熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
二、 实习时间
20##年07月04号~07月29号,具体安排如下表:
三、实习地点
江苏省无锡市无锡新区新安镇震泽路5号江苏软件外包产业园处子座B座
四、实习单位和部门
实习单位:无锡中软国际信息技术培训有限公司
实习部门:无锡中软国际信息技术培训有限公司
五、 实习内容
来到中软国际,主要实习方向为嵌入式开发,细化为LCD驱动开发。
所谓嵌入式系统是一台特殊用途的计算机,该计算机由它控制的设备完全封装。驱动这些系统的软件称为嵌入式软件。通用个人计算机可以执行多个任务,接受新的任务,并可由用户编程;而嵌入式系统有特定的需求,只能执行有限数量的预定义任务,嵌入式系统的优势在于,它们可以进行优化来进一步改善性能,并可以减小规模和成本。由于存在这些优势,嵌入式系统的使用越来越普及,因而使日常生活的各个方面(包括通讯、娱乐和工业控制系统)得到充分的改善。
为了成功的进行嵌入式开发,我们做了如下准备:C语言的强化,linux系统下的操作。
linux常用命令:
cd【目录】: 切换到指定的目录,可以是相对路径或者是绝对路径。绝对路径是以“ / ”开头,从目录的最顶层开始列出目录路径。相对路径不用“ / ”开头,只列出当前工作目录以下的目录路径。
ls【选项】【文件目录列表】:显示指定工作目录中所包含的内容的指令是ls,要说明的是ls命令列出文件的名字,而不是文件的内容。
mkdir【选项】 路径: “路径”可以是一系列,此时若路径中的目录不存在,则系统自动创建那些不存在的目录。
Pwd:显示的是当前工作目录的绝对路径。
cp【选项】源文件 目标文件或目标目录
mv【选项】 文件列表 目录
rm【选项】 文件列表:可从文件系统中删除文件及整个目录。
cat【选项】文件列表:用来将几个文件的内容相连接,并显示到终端上。
Clear:清除屏幕上的信息。
kill进程号:删除执行中的进程。
tar [选项] 文件或者目录:文件打包解包。
ifconfig网络接口【选项】【地址】:配置网络接口的地址、网络掩码等。
gcc[选项]要编译的文件 [选项] [目标文件]:编译可执行文件。
(2)在VMware中安装Linux,New—>Virtual Machine…->选择“custom”下一步->下一步,出现的界面中选择安装路径,必须注意待安装盘有足够的空间。因为后面安装的RedHat系统是桌面版本,它对内存还是有一定的要求,在机器内存较大的情况下,尽可能给RedHat多分配一些内存,此处分配的内存是256MB。下面可以选择默认选择,最后单击”Close”,此时虚拟机已经建立起来了。
接下来光盘配置使用我们下载的RedHat是iso文件,单击OK按钮。下面就可以启动安装RedHat系统了。首先进行语言的选择,选择中文,并单击前进按钮。接下来选择时区,此处选择上海时区,单击前进按钮。在进行用户帐户和主机命名设置时,我用“zxy”作为登录名且同时作为这台计算机的名称。安装向导的最后一步将用户安装过程中所做过的配置信息再次反馈给用户,确认信息。最后点击“安装”即可。
准备工作做好之后,开始进行嵌入式开发,以下是开发过程中所做的练习。
作业一(大小端)
#include<stdio.h>
typedef union tag_MYUNION
{char ch[4];
int value;
}MYUNION;
int main()
{MYUNION myunion;
myunion.value=0x12345678;
if(myunion.ch[0]==0x12)
printf("big endian\n");
else myunion.ch[0]==0x78;
printf("little endian\n");
return 0;}
作业二(多线程)
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
char *message;
int n;
printf("fork program starting\n");
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:
message="child:";
n =100;
break;
default:
sleep(1);
message="parent:";
n =100;
break;
}
for(n=1;n<100;n+=2)
{
printf("%s",message);
printf("%d,%d\n",n,n+1);
sleep(1);
}
exit(0);
}
作业三(大小字母输出及ASC码)
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
char *message;
int n;
printf("fork program starting\n");
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:
message="child:";
n =100;
break;
default:
sleep(1);
message="parent:";
n =100;
break;
}
for(n=1;n<100;n+=2)
{
printf("%s",message);
printf("%d,%d\n",n,n+1);
sleep(1);
}
exit(0);
}
作业四(字母排序)
#include<stdio.h>
#include<string.h>
int main()
{
int j=65;
int i;
char a[27];
char *b;
char readbuf[27]={0};
char readbuf1[27]={0};
for(i=0;i<26;i++)
{ a[i]=j;
j++;
}
a[i]='\0';
FILE *fp;
FILE *fp1;
FILE *fp2;
fp=fopen("zmpx.txt","w");
char *buf=a;
if(fp==NULL)
{ printf("file open failed.\n");
return 0;
}
fwrite(buf,strlen(buf),1,fp);
fclose(fp);
fp=fopen("zmpx.txt","r");
if(fp==NULL)
{
printf("file open failed.\n");
return 0;
}
fread(readbuf,strlen(buf),1,fp);
fp1=fopen("zhengxu.txt","w");
fwrite(readbuf,strlen(buf),1,fp1);
fclose(fp1);
fp=fopen("zmpx.txt","r");
if(fp==NULL)
{
printf("file open failed.\n");
return 0;
}
fread(readbuf,strlen(buf),1,fp);
for(i=0;i<26;i++)
{ fseek(fp,(-i-1),SEEK_END);
fread(b,1,1,fp);
readbuf1[i]=*b;}
fp2=fopen("daoxu.txt","w");
fwrite(readbuf1,strlen(buf),1,fp2);
fclose(fp2);
}
当然,嵌入式开发仅仅学习C语言是远远不够的。于是在我们已有的单片机基础之上,又深入学习了汇编语言。从而,嵌入式开发的准备工作,我们已基本完成。
在接下来的两周里,我们开始接触TQ2440开发板。刚接触开发板,我们自己对照使用手册开始接线。然后安装USB驱动,虚拟光驱,还有像Source Insight 3.5;CodeWarrior for ARM;SecureCRT Developer Suite;TFTP Server以及DNW这些软件。
首先我们做的有:
1.SecureCRT的设置。
2.设置DNW软件。
3.安装USB下载驱动安装完毕USB下载驱动后,打开DNW软件,就可以在DNW软件的顶上看到USB连接OK的字样同时可以在“设备管理器”看到刚刚安装的USB驱动此时就可以使用USB下载u-boot、操作系统和文件系统了。
4.安装GIVEIO驱动,
Step 1:首先打开PC的“控制面板”界面,双击“添加硬件”图标,进入到添加硬件的界面。
Step 2:然后点击“下一步”继续。系统会自动搜索硬件的。
Step 3:过一会会完成搜索,进入到下面第二图的界面,选择“是,我已 经连接了此硬件”。
Step 4:然后点击“下一步”继续出现“安装向导”,这里选择“安装我手动从列表选择的硬件(高级)”选项。
Step 5:然后点击“下一步”继续。在硬件列表中找到“端口(COM和LPT)”选项,然后点击“下一步”继续。
Step 6:点击“从磁盘安装”选项后继续。
Step 7:从“磁盘安装”界面中选择“浏览”选项。
Step 8:然后定位到刚才的GIVEIO目录下面,找到“GIVEIO.inf”文件,点击“打开”继续。
Step 9:然后回到“从磁盘安装”界面,点击“确定”继续回到驱动设备安装的界面,选择“giveio”设备后,点击“下一步”继续出现“向导准备安装您的硬件”界面中:。
Step 10:点击“下一步”继续然后出现驱动未经过微软认证的界面,点击“仍然继续”选项继续
Step 11:点击“完成”选项后就完成驱动安装了。
Step 12:在“设备管理器”中您可以看到新安装的驱动。
5.TFTP代理软件设置
至此,软件安装,设置基本完成。
接下来就是烧写驱动代码和图片代码。由于代码过于庞大,仅截图一段,仅供参考。
/**************************************************************
在LCD屏幕上指定坐标点画一个指定大小的图片
**************************************************************/
void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32 c;
int p = 0;
for( y = y0 ; y < l ; y++ )
{
for( x = x0 ; x < h ; x++ )
{
c = bmp[p+1] | (bmp[p]<<8) ;
if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
LCD_BUFFER[y0+y][x0+x] = c ;
p = p + 2 ;
}
}
}
/**************************************************************
**************************************************************/
void Lcd_TFT_Init(void)
{
Lcd_Init();
Lcd_PowerEnable(0, 1);
Lcd_EnvidOnOff(1); //turn on vedio
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) );
#define LCD_BLANK 12
#define C_UP ( LCD_XSIZE_TFT - LCD_BLANK*2 )
#define C_RIGHT ( LCD_XSIZE_TFT - LCD_BLANK*2 )
#define V_BLACK ( ( LCD_YSIZE_TFT - LCD_BLANK*4 ) / 6 )
Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT - LCD_BLANK ), ( LCD_YSIZE_TFT - LCD_BLANK ),0x0000); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff); //fill a Rectangle with some color
Glib_Line( LCD_BLANK,LCD_BLANK, (LCD_XSIZE_TFT-LCD_BLANK), (LCD_YSIZE_TFT-LCD_BLANK), 0x0000 ) ;
Glib_Line( LCD_BLANK,(LCD_YSIZE_TFT-LCD_BLANK), (LCD_XSIZE_TFT-LCD_BLANK), LCD_BLANK, 0x0000 ) ;
Glib_Line( (LCD_XSIZE_TFT/2),(LCD_BLANK*2 + V_BLACK*0), (LCD_XSIZE_TFT/2), (LCD_BLANK*2 + V_BLACK*6), 0x0000 ) ;
}
void Lcd_TFT_Test( void )
{
Uart_Printf("\nTest TFT LCD!\n");
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) ) ; //clear screen
Uart_Printf( "\nDisplay Black! Press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x1f) ) ; //clear screen
Uart_Printf( "Display White! Press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f) ) ; //clear screen
Uart_Printf( "Display Blue! Press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x00) ) ; //clear screen
Uart_Printf( "Display Green! Press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x00) ) ; //clear screen
Uart_Printf( "Display Red! Press any key to continue!\n" );
Uart_Getch() ; //wait uart input
/* Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x1f) ) ; //clear screen
Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x1f) ) ; //clear screen
Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );
Uart_Getch() ; //wait uart input
Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x00) ) ; //clear screen
Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );
Uart_Getch() ; //wait uart input
*/
Lcd_ClearScr(0xffff); //fill all screen with some color
#define LCD_BLANK 12
#define C_UP ( LCD_XSIZE_TFT - LCD_BLANK*2 )
#define C_RIGHT ( LCD_XSIZE_TFT - LCD_BLANK*2 )
#define V_BLACK ( ( LCD_YSIZE_TFT - LCD_BLANK*4 ) / 6 )
Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT - LCD_BLANK ), ( LCD_YSIZE_TFT - LCD_BLANK ),0x0000); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff); //fill a Rectangle with some color
Glib_Line( LCD_BLANK,LCD_BLANK, (LCD_XSIZE_TFT-LCD_BLANK), (LCD_YSIZE_TFT-LCD_BLANK), 0x0000 ) ;
Glib_Line( LCD_BLANK,(LCD_YSIZE_TFT-LCD_BLANK), (LCD_XSIZE_TFT-LCD_BLANK), LCD_BLANK, 0x0000 ) ;
Glib_Line( (LCD_XSIZE_TFT/2),(LCD_BLANK*2 + V_BLACK*0), (LCD_XSIZE_TFT/2), (LCD_BLANK*2 + V_BLACK*6), 0x0000 ) ;
#if(LCD_Type == LCDW43)
Uart_Printf( "Press any key to continue!\n" );
Uart_Getch() ; //Any Key To Next
Paint_Bmp(0, 0, 480, 272, TQ_LOGO_480272);
#elif(LCD_Type == VGA)
Uart_Printf( "Press any key to continue!\n" );
Uart_Getch() ; //Any Key To Next
Paint_Bmp(0, 0, 640, 480, TQ_LOGO_640480);
#endif
Uart_Printf("LCD Test Complete!\n");
Uart_Printf("Press any key to quit!\n");
Uart_Getch();
}
//*************************************************************
插入组号“3”的代码。
Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f) );
Glib_FilledRectangle(170,46,310,66,0xf800);
Glib_FilledRectangle(290,46,310,146,0xf800);
Glib_FilledRectangle(170,126,310,146,0xf800);
Glib_FilledRectangle(290,146,310,226,0xf800);
Glib_FilledRectangle(170,206,310,226,0xf800);
由于插入图片的代码过于庞大在此就补贴出了。
插入图片的具体方法是:1.将已有图片用PS等软件转换成像素为480*272大小的BMP文件。
2.用BMP图片转换软件将BMP图文件转换成.c文件。
3.讲图文件代码插入图片显示代码段中。
4.保存,编译,测试,运行成功。
至此项目开发内容基本完成,接下来是完成项目的文档,包括:
①项目计划
②概要设计说明
③需求规格说明
④详细设计说明
⑤测试问题跟踪
在项目验收过后,一个月的实习内容,圆满结束。
六、实习总结
为期一个月的实习就要结束了,我在这一个月的实习中学到了很多在课堂上根本就学不到的知识,真是受益非浅。
有一名话叫做:不经过风雨,怎么见彩虹?我想改一下:不真正进入社会,怎能了解社会呢?
中软国际位于江苏省无锡市国家软件园,该公司是国内大型综合性软件与信息服务企业,具有极高的市场感召力和客户忠诚度,以领先的技术、丰富的经验、精湛的服务在中国 IT 行业享有极高的声誉。这样的公司给我们学校电子信息类的学生提供了难得的实习条件,在那里,公司的各种管理方法、流程和管理者之间的上下层关系可以说是我们现实社会中一个缩影的充分体现,她为我们在校的学生踏进社会提供了一个抢先一步踏进社会体验生活的可贵机会。
刚开始在中软国际里实习第一个体会到的就是一个字——“累”,但后来慢慢的习惯下来,因为刚从校园里走出来,没有经历过很大风吹雨打,可以说一直以来在保护伞下走过,这次学校组织的实习生活可以给我真正体会到现实生活中的酸、甜、苦、辣;但是我很高兴,因为在实习中到困难时,并没有后退,而是勇敢地面对现实,向困难中挑战。实习磨炼了我的意志,使我现在的意志比实习前坚强多,我真正体会到“苦尽甘来”的味道。
在实习过程中还学会了很多东西:
首先,第一个是懂得了什么叫做团队精神,一个班组要团结,不然的话就有可能导致事情的失败。
其次,我学会了沟通,学会处理好身边的人际关系,学会在苦中作乐的技巧,我的工作是比较枯燥的,每天都反复的做哪份工作,如果没有同身边的同事沟通,处理好身边的人际关系,一个人是很孤独,同时在一个工位上工作时间长了,前后工位之间将免不了有磨擦出现,处理不好,将影响我们的工作质量。这就让我懂得了人际关系的重要性,一个好的人缘将会给我们的工作带来了无限的方便和欢乐。
其三在工作中学会了研究。在工作中,方法中的正确和方便性非常重要,直接影响到代码实现的正确与否,在自己的岗位上做熟了,对自己所做的工作也仔细研究起来,细心分析其方法,代码的缺点,自己优化出一个更加便捷简单的代码来提高自己,真正充分体现出大学生的不同之处,体现了大学生的风采。
其四,这次中软国际之旅给同学增进了不少友谊,加深了同学之间的感情。在这陌生的地方实习,意识到同学之间的帮助非常重要,大家紧密的团结在一起、生活、工作有遇到什么问题都互相的关顾,加深了同学之间的友谊。 通过这次实习,让我成熟了很多。
回想自己在这期间的工作学习情况,不尽如意。对此我思考过,学习经验自然是一个因素,然而更重要的是心态的转变没有做到位。现在发现了这个不足之处,应该还算是及时吧,因为我明白了何谓工作。在接下来的日子里,我会朝这个方向努力,我相信自己能够把那些不该再存在的“特点”抹掉。
对于我来说,这是我第一次走进公司,也是我第一次真正体验一份工作和感受企业文化。感谢学校,给了我这次体验人生的机会。感谢中软国际,让我在这次实习中学到了很多东西。向尊敬的老师、敬爱的校领导致敬!
嵌入式实习报告20xx年1月13日一、嵌入式的概述:随着信息化技术的发展和数字化产品的普及,以计算机技术、芯片技术和软件技术为核心…
嵌入式系统设计实训报告实训报告目录一任务名称内容1二题目分析1三系统平台搭建6四系统设计与实现7五心得体会14六参考文献及资料15…
嵌入式系统实验报告姓名:##学号:##班级:计算机科学与技术非师范121班实验一LCD控制一、实验目的1、初步掌握液晶显示屏的使用…
嵌入式系统实习报告学院专业班级学号姓名指导老师计算机与信息学院电子信息工程20xx111120xx111123王金民严朝军彭文标嵌…
成绩CSIP嵌入式实习报告院系计算机与工程学院专业计算机科学与技术学生姓名学号实习单位指导老师实习时间20xx520xx9本着对嵌…
你好,我是一名嵌入式开发爱好者.近来总是看到很多初学者(多数是在校大学生)由于没有条件,想学习却不知道如何下手。本人绝对能体会到学…
这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。广义上…
实习日志20xx年x月x日今天是我来到XX软件有限公司实习的第一天,在公司工作先要进行培训,因此将进行长达4个多月的培训。培训是一…
学习嵌入式系统心得说实在话在没有学习之前,以及在学之前通过一些口中得知这是一门很不错,很有意思的一门课。而且目前是十分吃香的一门课…
实习总结就在昨天3月x日,学校规定实习时间已经到期了。从上个月的13日到现在已经近一个月,虽然与公司的实习时间还没有结束,但是为了…
嵌入式实验报告期末论文学生姓名杨佳洁学号11570118班级11计算机2班指导教师黄静20xx年5月20日嵌入式程序设计与应用课程…