凌阳四个月学习报告
- 格式:doc
- 大小:94.00 KB
- 文档页数:7
大二大三在创新实验室呆了两年时间,在创新实验室的两年让我学到了很多的东西,非常感谢学校能够给我这样一个成长的平台。
也就是在实验室了解到了嵌入式这个方向。
由于有硬件方面的基础,在实验室也经常用C语言写单片机程序,C语言的基础还是很扎实的,就嵌入式来说,通常情况下也是以C语言为主的。
本身的条件满足了,然后就去更深入的了解了一下嵌入式的具体方面的内容,发现我对嵌入式这一行非常的感兴趣。
所以就试着自学了一段时间,发现自学的话很慢效率又不高,嵌入式本身涉及到的内容也很多,就决定去参加培训。
参加培训虽说要花费很多钱,但是相对于自己以后的发展方向和节省的时间来说也就没有那么重要了,在跟父母商量过后,父母也非常的支持我来参加培训,所以就在大三暑假开始来北京凌阳爱普科技有限公司参加了为期四个月的嵌入式软件工程师的培训。
培训总共分为七个阶段,每个阶段所涉及到的内容都不一样,但是都是以C语言为主线的。
七个阶段分别为嵌入式C语言编程、Linux 基础、Linux系统编程、C++和Qt、网络编程、嵌入式平台开发、嵌入式驱动开发。
在每个阶段过后都会有一个小的项目来巩固之前学过的东西,我感觉这种学习方式很好。
培训其实相当于填鸭式教育,一直不停的灌输给你知识,通过项目可以让大家每天紧绷的脑筋轻松一下,也通过项目来检验一下这个阶段学的怎么样,给自己一个交代,督促自己更加努力的去学习。
下面分别介绍每个阶段所学习的主要内容及收获。
第一个阶段:嵌入式C语言编程。
由于来培训的学院都是有C语言基础的,所以这个阶段所讲的C语言就不是从最基础的地方讲起了,而是讲了重点以及C语言的精华的部分。
其中涉及到C语言基础、数组与函数、指针的感念与应用、字符与字符串处理函数、结构体与位运算、数据链表、文件操作、栈和队列等。
其实嵌入式C语言和单片机的C语言还是有很大的不同的,可能是所用到的C语言的重点不一样吧。
单片机的C语言相对来说可能会简单一点,知道C语言简单的语法以及简单的用法就可以,一般不会涉及到链表、文件操作、栈和队列等相对来说比较复杂的东西。
而嵌入式C语言则对这些方面要求比较高。
所以就重点讲了这些东西。
其实嵌入式C语言这个阶段也就九天的课程,但是也就是这九天,让我意识到了自己的不足,才知道自己自认为掌握的比较好的C语言到底有多差。
感觉自己之前就像“坐井观天”一样。
通过九天的充实学习,我的C语言方面的知识以及我对C语言的认识有了很大的提高。
也非常教我们C语言的涛哥(赵秀涛),他的教学方式几乎能够照顾到所有的人,教会了我们很多专业以及非专业的知识,是我非常佩服的一个老师。
第一个阶段的学习让我更加坚定了走嵌入式这条路的信念!在这个阶段的最后我们做了一个小的项目:歌词解析项目。
在通过三天的努力之后,终于把这个项目完成了。
这个项目主要考查了我们对歌词文件的操作,需要把歌词文件的内容读取到内存中,然后进行字符串的切割,提取有用的信息,然后存入链表,启动千千静听播放歌曲,在窗口上随着歌曲播放的进度打印歌词信息,做到歌曲与歌词的同步。
看到自己亲自去做成的东西,非常的高兴,也对自己充满了信心!下面就是歌词解析项目的效果图:第二个阶段:Linux基础。
以前大部分人接触到的都是windows 系统,对Linux系统还不太了解。
所以这个阶段就是让大家了解Linux 系统以及相关的知识的阶段。
主要包括以下内容:Linux安装以及Linux操作系统介绍、Linux常用命令寄目录结构介绍、VI及GCC和GDB、GNU Make及Makefile、嵌入式开发平台的搭建、shell编程、系统调用与标准IO库、2440各外设等。
这个阶段刚开始讲了一些比较基础的有关Linux的内容,知道了Linux的由来,以及常用的操作系统,不再仅仅局限于Windows。
第一次接触到开源工程,了解到了开源工程的相关内容,对开源工程有了很大的兴趣,也非常的支持开源工程,希望以后有机会能够参与到当中去,跟大家分享自己所学。
我们装了虚拟机软件,在虚拟机上装了Linux系统(Redhat),并且配发了ARM9开发板(S3C2440) ,我们自己给板子烧了已经移植好的Linux内核。
学会了如何去烧开发板,也大概了解到了烧开发板的各种工具,以及不同的烧写方式。
同时也了解到了bootloader,对bootloader引导Linux内核启动的过程有了一定的了解。
并且学会了使用常用的bootloader。
这些都是之前没有接触过的,对于我们来说都是很新奇的东西。
所以对它们都非常地好奇,收获也很大。
第三个阶段:Linux系统编程。
在上个阶段对Linux系统有所了解之后,接下来这个阶段主要讲解了在Linux系统下编写程序。
主要讲了以下内容:系统调用与标准IO库、外设、进程、管道以及命名管道、消息队列与共享内存、信号、线程、数据库等各方面的内容。
本阶段重点讲解了标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(管道、命名管道、消息队列、信号、信号量等),同步与互斥等重要知识。
与实际应用相联系,强化了对Linux应用开发的理解和代码调试的能力。
之前写单片机程序的时候是不会涉及到多线程多进程这些东西的。
以前也老是疑惑为什么计算机可以同时干那么多事情,那个时候也就知道计算机是多任务的,可以同时执行多个任务。
但是就一个程序来说,怎么让它同时做多件事情呢?这个可能是在这之前一直是个问号。
学了Linux下的多进程多线程之后发现这些都是可以实现的,也打破了以前认为的一个程序只有一个main函数也就只能干一件事情的看法。
后面又学习了进程间通信的方法,以及进程或线程的同步,互斥锁信号量等,才知道Linux内核是多么的强大,同时也知道了自己还有很多的东西要去学。
还有很多知道自己不知道的东西,也真正懂了在技术方面天外有天人外有人这句话的真正的含义。
这个阶段过后我们又做了一个项目:基于ARM9平台的Mplayer播放器。
这个项目所要求的要实现的基本功能如下:实现mp3 文件的播放(必做部分)1. 显示歌曲信息2. 显示同步歌词3. 显示歌曲列表,当前播放歌曲须要反显4. 显示当前播放进度5. 实现mp3 文件的播放/暂停、上一首、下一首、快进、快退(触摸屏、物理按键都要实现)等控制这个项目的基本功能我都实现了,并且实现了歌曲列表翻页,按进度条可以跳到相应的地方去播放歌曲并且歌词也同步到那个地方,并且把歌曲和歌词信息存到了数据库当中,利用提高了效率。
还实现了歌曲的单曲播放、随机播放功能。
这个项目我提供了我们这一组的创新。
第四个阶段:网络编程。
网络编程也是我们学习的重点之一,计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,本阶段从Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面讲解Linux网络应用开发。
重点介绍了网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。
在此之前一直疑惑数据在网络上是怎样传输的,最简单的是像QQ、飞信、飞秋这一些即时聊天工具怎么实现的?这些可以说一直很困惑,但是在学了这个阶段之后,当自己真正也做了飞鸽传书这个项目之后才发现,其实真正揭开网络的面纱之后也不是那么难。
飞鸽传书这个项目主要完成了局域网内的通信,包括用户的上下线、局域网内聊天、传输文件等功能。
第五个阶段:C++&Qt阶段。
C++是Linux应用开发主要语言之一,本阶段重点学习了掌握面向对象编程的基本思想以及C++的重要内容。
C++课程主要包括面向对象语言概述、C++语言基础知识、类与对象、类与对象的高级应用、派生与继承、动态连编与虚函数等内容。
同时图形界面编程是嵌入式开发中非常重要的一个环节。
由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习可以熟练编写GUI程序,并移植QT应用程序到S3C2440平台。
Qt课程内容包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
C++可以简单的说是在C的基础上添加了面向对象的特性,是完全兼容C语言的。
大部分还是C语言的东西,但是C++和C语言的本质是不一样的,C是面向过程的语言,C++是面向对象的语言。
之前由于只是接触过C语言,对面向对象的语言也只是停留在听说的层面上。
通过这个阶段都学习,了解到了面向对象语言的优点,有些地方是面向过程的语言无法超越的,也是不可能胜任的。
比如编写大型的软件用C 语言编写几乎是不可能的,但是C++就能很好的胜任。
之前所学到的东西都是不牵涉到上层UI界面的,学习了Qt发现,其实上层的UI界面的开发也不是自己想象的那么难(可能是别人都封装好的缘故),上课的时候看着自己跟着老师一步一步的开发出自己想要的任何的图形界面,那种喜悦真的无法言语。
这个阶段我们做了Qt黑白棋的项目,项目有如下的要求:1、实现双人对战2、实现悔棋功能3、实现人机对战这些都是必须实现的基本功能,通过这个项目加深了对Qt中的知识点的理解,如:布局、信号与槽、事件的处理等。
从整体上把握如何开发Qt应用程序。
同时也是通过这个项目了解到了自己不够熟悉的地方,并做出相应的加强。
这个项目我除了实现了要求的基本功能之外,我还实现了背景音乐、换背景、网络对战、网络聊天、网络悔棋、多人网络对战等创新功能。
第六阶段:嵌入式平台开发,以及第七阶段:嵌入式驱动开发。
这两个阶段主要讲解ARM体系结构,嵌入式系统的移植,以及Linux 下设备驱动的开发。
这两个阶段可能相对来说比较抽象难理解一些。
了解ARM处理器的基础知识熟悉ARM体系结构及其相关资源。
主要内容包括ARM编程模型、异常中断、寄存器介绍等方面,包括ARM编程环境、ARM/Thumb指令集、寻址方式、调试、汇编与C混合编程等方面内容,要求熟悉ARM常用伪指令与伪操作,ADS概述与项目工程的建立,AXD 环境的建立与调试过程。
了解嵌入式Linux的系统组成,熟悉Bootloader的目录结构、启动过程、源码分析,重点讲解vivi的配置机制及其编译原理,Uboot目录结构和源码分析。
了解Linux内核的目录及源码结构,熟悉内核移植、裁剪等过程及内核配置机制。
了解Linux文件系统的基本概念及其基本架构,掌握了一个完整的根文件系统的组成及其制作过程,掌握了基本应用程序,如TFTP/FTP/TELNET/HTTP的配置及使用,熟悉cramfs、yaffs、nfs格式根文件系统的制作。