实习报告苏嵌[1].doc
学 生 实 习 报 告成绩实 习 名 称 专业生产实习 嵌入式平台开发 院 部 名 称 电子信息工程学院 专 业 电子信息工程 班 级 学 生 姓 名 学 号 实 习 地 点 指 导 教 师 实习起止时间:年月日至年月日 金陵科技学院教务处制前言嵌入式作为现今的热门领域,涵盖了微电子技术,信息电子信息技术计算机软件和硬件等多项技术领域的应用计算机软件和硬件等多项技术领域的应用计算机软件和硬件等多项技术领域的应用计算机软件和硬件等多项技术领域的应用。大到航空航天石油化工能源控制核电站以及机器人系统核电站以及机器人系统核电站,小到日常使用的智能手机数字电视掌上电脑,嵌入式技术正在我们的生活中占据着越来越重要的地位中.业内人士认为,目前嵌入式行业至少存在30-50万的人才缺口,仅北京市场嵌入式软件开发人员的需求就已经超过了5万人,而且还在持续增加,这主要有两方面的原因:一是与目前我们高校的专业设置有关,我国高校的计算机教育普遍以应用软件为主,很少涉及嵌入式软件的课程,因此企业很难招聘到马上可以投入嵌入式软件开发的实战型人才;二是嵌入式领域门槛相对较高,知识要求比较全面,而且需要一定的实验环境(开发板和工具软件)和有经验的人进行指导。江苏嵌入式软件公共技术中心(简称苏嵌),是面向全社会开展嵌入式技术系列培训课程的专业服务机构,座落于南京工业大学国家科技园,由国内外知名IT企业机构、江苏省软件行业协会、南京工业大学等知名院校负责协助实施。得到了江苏省电子协会、江苏省高等学校教育技术研究会等大力支持。目前已经成长为华东地区规模最大,最具专业的嵌入式教育培训机构 苏嵌拥有核心技术人员博士以上学历12人,硕士学历近20人,同时汇聚了30多名来自于南大、东大、中兴等科研院校的一线研发主力作为专家师资团队,聘请了龙芯、Redhat、中兴、华为、电信、ARM等各大公司的技术负责人和项目经理作为中心的技术顾问。 嵌入式技术凝聚了计算机和信息技术的精华,嵌入式技术人才是具备透视计算机和信息技术奥秘的高级专业人才。作为江苏较早开展嵌入式技术教育的研究机构,苏嵌将嵌入式技术人才的培养做为自己的终身事业,把最新的技术发展和行业需求结合起来,为广大学员提供最完善、最有效的技术咨询和培训服务。凭着多年的技术积累和教学经验,凭着雄厚的师资、优越的课程体系和严格的教学管理,苏嵌正成为江苏嵌入式技术高级专业人才的摇篮。一、实习目的1、巩固在书本上学到的理论知识,生产实习是作为本学科的一门实践性的课程,将理论知识与实践生产相结合,加深对理论知识的理解。2、获得在书本上不易了解和不易学到的生产现场的实际知识,培养发现问题解决问题的能力,使之在实践中得到提高和锻炼。二、实习时间四周,共计二十六天 时间实习内容7月2日嵌入式开发概述及开发工具的使用嵌入式开发脚本-shell编程7月3日实验:开发工具使用,shell编程实验7月4日嵌入式C语言高级开发讲解7月5日实验:嵌入式C语言开发实训编程7月6日嵌入式C语言高级开发讲解7月7日作业:完成train1、train27月8日作业:完成train4、train57月9日考试:第一阶段考试7月10日嵌入式Linux文件编程嵌入式Linux进程控制编程7月11日实验:嵌入式Linux文件编程与进程控制实训编程7月12日嵌入式Linux多线程编程嵌入式Linux网络编程7月13日实验:嵌入式Linux多线程编程与网络实训编程7月14日作业:编程实现服务器-客户端通信7月15日作业:编程实现客户端-服务器-客户端聊天室7月16日嵌入式GUI-QT7月17日实验:嵌入式GUI-QT实训开发7月18日嵌入式ARM编程7月19日实验:嵌入式ARM裸机实训开发7月20日嵌入式ARM编程7月23日实验:嵌入式ARM裸机实训开发7月24日嵌入式开发平台的搭建及测试7月25日实验:嵌入式ARM裸机实训开发7月26日嵌入式Linux驱动开发嵌入式项目开发流程介绍7月27日考试:最后阶段考试三、实习地点金陵科技学院江宁校区工科楼C510四、实习单位江苏嵌入式软件公共技术中心五、实习内容1、安装Linux:在PC机中安装Vmware 6.0,再装入Linux 镜像并安装。2、练习Linux相关命令:gedit、vim 打开文本编译器,文件不存在时新建文件tar xvzf 解压压缩文件tar cvzf 压缩文件cp 复制文件mv 剪切文件,可重命名,可隐藏文件mkdir 创建文件夹touch 创建不打开文件文件cat 查看文件内容ls 查看当前目录下内容chmod 加减文件属性,w/4 ,r/2, x/1VI三种模式:命令行模式:ESC键插入模式:A或I键底行模式:shift + :w 保存 q 退出 yy复制 p粘贴 delete 删除语句 ./文件名 执行 gcc编译rm 删除文件 rm f 强制删除文件3、编译器 gcc源程序-预处理-编译-汇编-链接-可执行文件预处理:头文件展开、宏替换 编译:将.C文件编译成.O文件gcc -o编译中 链接成可执行文件,默认a.outgcc -c编译中 预处理、编译、汇编,生成.o目标文件gcc e编译中 预处理,生成.i文件gcc wall 编译后生成所有的警告信息 gcc static 连接时装载静态链接库文件,生成.a文件gcc O 对程序优化编译、链接,整个源代码会在这过程中进行优化处理gcc g 产生调试工具gdb 4、静态库与动态库动态库只有在使用其程序执行时才被链接使用,而不是将需要的部分直接编译进可执行文件中,并且一个动态库可以被多个程序使用,可称为共享库;静态库将会整合到程序中,在程序执行时不用加载静态库。从而可知,连接到静态库会使得程序臃肿,并难以升级,但可能会比较容易部署。而链接到动态库会使得程序轻便易于升级,但难以部署。5、创建静态库并使用静态库gcc c 源文件.car rcs 目标文件1 目标文件2gcc O L. -lname 6、调试器 gdbgdb是GNU发布的一款功能强大的程序调试工具gdb主要完成下面三个方面的功能:1)、启动被调试程序2)、让被调试的程序在指定的位置停住3)、当程序被停住时,可以检查程序状态-变量值run(r) 开始运行程序next(n) 单步运行程序(不进入子程序)step(s) 单步运行程序(进入子程序)conutinue(c) 继续运行程序print(p) 变量名 查看指定变量值 finish 运行程序 直到当前函数结束watch 变量名 对指定变量进行监控quit(q) 退出gdb7、工程管理器 make工程管理器 顾名思义,是指管理较多的文件 make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动妨碍西安更新过的文件而减少编译的工作量,同时,它通过读入makefile文件的内容来执行大量的编译工作。make读入的唯一配置文件。一个makefile中常包含如下内容: A,需有make工具创建的目标体(target),通常是目标文件或可执行文件; B,要创建的目标体所依赖的文件 。makefile格式:target:depend_files<tab >command 运行command命令创建目标体target,target依赖于文件:depend_files在makefile中,规则的顺序是很重要的,因为,makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在makefie中的目标可能会有很多,但是第一条规则重点目标将被确立为最终的目标。makefile中把那些没有任何依赖只有执行冬菇总的目标称为“伪目标”例: .PHONY:cleanclean: rm f hello main.o func1.o func2.o “.PHONY”将“clean”目标声明为伪目标8、C基础1)基本数据类型类型标识符 名 字 取值范围char 字符型 ASCII字符代码unsigned char 无符号字符型 0至255signed char 有符号字符型 -27 27-1int 整型 -231 231-1unsigned int 无符号整型 0 216-1signed int 有符号整型 同intfloat 浮点 10-381038double 双精度型 10-3810382)移植性在嵌入式开发中,考虑到代码的移植性,对于有符号(signed)与无符号(unsigned)一定要留心系统默认的是无符号还是有符号;为了解决此问题,通常使用typedef来重新指定声明无符号还是有符号;typedef int sig_int;typedef unsigned int un_int;3)声明与定义定义:创建一个变量,为其分配内存空间,并为它取名字(变量名),一个变量只能定义一次;声明:告知编译器,这个名字(变量名)已经匹配在一块内存上了,但是并未为其分配内存;4)关键字register:请求编译器尽可能地将变量存在CPU内部寄存器中;使用注意:register修饰变量的类型必须是CPU所接受的;register变量可能不是在内存中存储,所以不能使用&来获取变量的地址static:全局静态变量:作用范围局限于它的源文件,即只有本文件内的代码才可以访问它,变量名在其他文件内不可见局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内的静态变量的值也能够维持静态函数:作用范围仅限于它的源文件,即只有本文件内才能够调用,函数名在其他文件不可见存放位置:程序开始时,存放在全局数据区,结束时释放空间,默认初始化值是0,使用时可改变其值;const:const给读代码的人传达非常有用的信息。比如一个函数的参数是const char *,你在调用这个函数时就可以放心地传给它char *或const char *指针,而不必担心指针所指的内存单元被改写。尽可能多地使用const限定符,把不该变的都声明成只读,这样可以依靠编译器检查程序中的Bug,防止意外改写数据。const对编译器优化是一个有用的提示,编译器也许会把const变量优化成常量volatile的作用: 不会在两个操作之间把volatile变量缓存存在寄存器中。 不做常量合并、常量传播等优化 对volatile 变量的读写不会被优化掉使用volatile的情况: 中断服务程序中修改的供其它程序检测变量 多任务环境下各任务间共享的标志 对存储器映射寄存器的读写extern:表明变量或函数的定义在别的文件中,下面用到的这些变量或是函数是外来的,不是本文件定义的,提编译器遇到此变量或函数时,在其他模块中寻找定义。struct:在网络协议、通信控制、嵌入式系统的C/C+编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。union:当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时,我们也可以使用联合体来发挥其长处。 5)内存管理: 内存分配方式有三种: 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。9、系统调用在Linux中,程序的运行空间分为内核空间和用户空间,逻辑上相互隔离。用户进程在通常情况下不允许访问内核数据,也无法使用内核函数。所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得造作系统内核提供的服务。 10、用户编程接口(API)系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软件中断机制向内核提交请求,以获得内核服务的接口。在实际使用中程序员调用的通常是用户编程接口API。系统命令相对API更高的一层,它实际上一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能。11、库函数C库函数的文件操作是独立具体的操作系统平台的,不管是DOS、Windows、Linux还是在VxWorks中都是这些函数。六、实习总结我很羡慕能够在嵌入式方面独档一面的高手,希望有一天我也能像他们那样自信并自如的在嵌入式这片热土上挥洒着自己的青春热血。怀着缤纷的梦踩着无比豪迈的步伐,开始了嵌入式的征程。 在短暂的一个月学习中,我们从LINUX基础入手,强化了C语言编程,学习了LINUX系统编程和应用编程。得益于老师的教育模式:理论和实践相结合,实践验证理论,理论推动实践,使得我学习得更加透彻。对知识的掌握更加牢固,毕竟每个知识点自己都亲手实践过。学到东西才是对这段时间最好的交代。在这段学习过程中,重要的并不仅仅只有学到东西而已。学习过程与同学的点点滴滴都将是我记忆力明媚的风景。与同学讨论问题,哪怕争得面红耳赤,转眼 又可以嬉笑打闹,这就是同学。不提时间还好,转眼大三下,分别在即。这也许是最后一次在一起上课了。当然不能忘记,梁老师生动的授课以及热心尽职的实验演示让我在轻松获取知识的同时,也能学到他们做人的一些价值取向。纵观世界,有知识的人多不胜数,但若没有良好的思想道德,最后也不过是为祸人间。所以我们以后无论是否会有惊天成就,莫要为损人不利己的事情,亦是有利于国家的,亦是无愧于此生。老生常谈了,不过谢谢老师! 其次,我想谈一下实习的意义,这不是我想到的,但我觉得很对:实习是一种对用人单位和实习生都有益的人力资源制度安排。对接受实习生的单位而言,是发展储备人力资源的措施,可以让其低成本、大范围的选择人才,培养和发现真正符合用人单位要求的人才,亦可以作为用人单位的公关手段,让更多的社会成员(如实习生)了解用人单位的文化和理念,从而增强社会对该组织的认同感并赢得声誉。对学生而言,实习可以使每一个学生有更多的机会尝试不同的工作,扮演不同的社会角色,逐步完成职业化角色的转化,发现自己真实的潜力和兴趣,以奠定良好的事业基础,也为自我成长丰富了阅历,促进整个社会人才资源的优化配置。 作为一名学生,我想当然的认为学习的目的是为了通过结业考试,可是,通过本次学习,我想学习可能为了更多,比如为了获取知识,或者获取工作技能,再或者是为了解决心里的疑问。学习为了获取工作技能,貌似更符合语境。毕业在即,想想如何安身立命吧!一个月的时间在人的生命长河中也许微不足道,但这个月的时间却有可能改变生命长河的流向。第 16 页