嵌入式阶段性学习总结

        转眼间近四个月的学习就结束了,我的这个阶段的生活也画上了句号。回想近四个月的学习、工作和生活上,有过震撼、诧异、怀疑,也有此刻越来越多的探求和欣喜,我感受最多的是自我在不断的成长和走向成熟,一个不断发现自我、创新自我的过程。现对这段时间的学习做如下总结:

        一、在学习中,首先,是C语言学习阶段。虽然之前学习过C语言,但是掌握的并不是很熟练。通过这个阶段让我对C语言更加熟悉,尤其是在指针,指针与数组,指针与函数这几个知识点,相对于以往已经有了很大的提高。在这个阶段,老师的耐心和专业,以及我认真听讲,认真完成课后作业,花时间去理解与实践,是我有所提高的主要原因。当然也有遇到困难的时候,在这个时候我在朋友有空的时间,会请教解决问题。

        其次是Linux基础阶段,在这个阶段学习了Linux基础。这里主要老师主要讲解了认识linux操作系统和基本命令操作,Shell脚本编程,Makefile文件管理,以及对上个阶段的一些补充。Linux基本命令的操作可以让用户通过终端以命令行的方式与Linux系统进行交互,这个过程实现了用户空间到内核空间,内核空间到用户空间的交互,从而达到目的。Shell脚本编程,它有一套shell脚本语言,通过shell脚本编程可以实现按一定逻辑和顺序执行多条命令,达到最终的效果。通常在一些系统初始化的时候,会编写shell脚本自动的执行某些命令,而不用人为的输入。Makefile文件管理是对批量文件进行管理,当某一个程序有多个源文件时,通过Makefile管理文件可以使得我们操作这些文件变得更加方便。最后是内存的动态开辟,以及堆栈,结构体,联合体的学习,这些都是C语言的一些基本知识,在写代码,分析代码的时候会用到这些基础知识。这些就是我对这部分学习知识点大致的理解;在学习过程中shell脚本编程对我来说会有一点点难度,毕竟在之前是没有接触到这门编程,不过在学习中跟着老师的节奏,对这部分的知识初步掌握。

        然后是数据结构的学习,这是一门比较难的学科。因为它的引用场景很多,我们不觉中都会有用到,在求职的过程中也会对此有所要求,所以学好这门课程非常重要。例如linux系统就是用纯C语言以及数据结构实现的。这个阶段主要介绍了数据结构的基础知识,常用的一些数据结构以及常用的算法(排序算法、查找算法)。在这个阶段需要有良好的C语言基础和逻辑思维,这里会大量的用到指针和结构体。刚开始学习链表、栈、队列的时候还好,但是学到树和图的时候会明显感到变得很难,我的问题难在理解,但是在课后花了些时间,对这部分的知识点也算是基本掌握。其实我觉得数据结构,主要是学习逻辑抽象和解决问题的方法。通过对实际问题的抽象成对应的数据结构,加入合适的算法,从而达到解决问题以及提高程序的运行效率的目的。

        接下来学习了linux高级编程,学完这里我们就可以编写一些简单的小程序。在这个阶段主要学习了I/O编程(标准I/O、文件I/O),这里是我们可以通过调用C库函数或者系统调用的相关函数,实现对文件的读写操作;进线程,通过学习进线程可以实现多任务处理程序,当然在这个过程中,需要熟悉进程间通信,线程间通信,临界资源的保护等;网络编程,通过学习网络编程,我们可以通过TCP/IP或者UDP协议自己搭建服务器和客户端,实现一些小程序。为了提高cpu的利用率,通过进程,线程实现并发服务器,或者通过select,poll,epoll I/O多路复用实现伪并发。这个阶段结束后,我做了一个基于TCP/IP的文件服务器。通过这个项目,将这个阶段所学的知识运用起来,让自己对这部分知识更加熟悉并能正确的运用。在做项目的时候也遇到了一些问题,主要是服务器客户端收发不一致,最终统一收发大小,调整两边收发最终解决了这个问题。

        在C++学习阶段,这是我学习的第二门编程语言,在学习的过程中,相较于C我还是有些不习惯,比C语言的语法要求更加严格,对变量进行了保护,对代码进行了封装。C++的三大特性:封装、继承、多态,它兼容了C的特性。这个阶段主要学习了C++的基本语法、函数重载、继承、多态、异常处理、和STL标准模板库。通过学习C++我现在掌握其基本语法,能比较熟练的使用C++,但是缺乏对C++的大量的编程练习,这是我之后需要弥补的。

        在QT阶段,图形界面应用编程开发。学完这里我们可以使用C++编程语言,编写出自己的图形化界面应用程序,最终打包成可执行程序软件。这会使得我们的程序的功能更加直观,用户也更加方便操作使用。Qt中我认为核心是信号与槽机制,这个机制是实现许多功能的前提,它可以将两个对象关联起来(进行通信),并执行对应的操作,最终实现相应的功能。这个阶段主要讲了一些基础控件的使用,三个主窗口的使用(mainWindow、QWidget、QDialog),Qt事件机制,文件操作,进程线程,网络通信 ,打包发布软件。通过对Qt的学习,我也是能做一些简单的小软件,熟悉以上学习的部分的使用。最后结束时,做了一个项目对这部分知识的巩固学习。我和另一个同学做了一个远程网络摄像头的一个软件,这个软件的功能主要是实现视频监控。Qt实现一个客户端,在linux系统搭建一个服务器,在客户端可以看到视频监控画面,服务器做数据的中转。学习到这个阶段自己有了,很大的提高。

        后面的是关于底层硬件的学习,主要学习ARM,系统移植,以及驱动程序设计开发。

       在ARM阶段,主要学习ARM的框架,ARM汇编指令,基于ARM的裸机编程。这里就直接和硬件打交道了,但是在此之前我们需要搭建好开发环境(交叉编译),然后就可以进行开发了。学习完了ARM框架和汇编指令后,进行裸机编程实现点灯,PWM波,看门狗定时器,ADC,中断,串口这些接口,还介绍了通信方式:SPI总线,IIC。在学习ARM指令的时候,异常向量表,以及几种模式的切换操作,理解时有些困难。这里需要自己多实践,记忆这些指令的使用,以及异常处理流程。在学习裸机编程时,每当写完程序看到硬件正常工作并实现功能时,自己内心是很开心的。当然有时候写完程序,硬件没有反应,这就需要多分析代码和查看芯片手册寻找问题,然后解决问题。学完这个阶段,我对硬件有了一定的了解,也能基于ARM编写裸机驱动程序,也是收获满满。

        在系统移植阶段,主要学习操作系统的移植。一般是将操作系统移植到嵌入式开发板上,移植的流程为:uboot移植,内核移植,设备树,根文件系统。在实际开发中,为了方便会通过文件系统实现开发板与主机挂载,实现交叉编译(在主机上编译完程序后,再到开发板上执行)。uboot的作用是引导操作系统启动,这里主要对硬件做了一些初始化为启动系统做准备。内核移植需要到官网下载源码,然后根据需要编译内核代码,这里使用menuconfig命令 开启一个图形化界面选择内核模块进行编译,但是需要匹配开发板的芯片,不然内核代码是没有用的。在内核源码中找到设备树目录,找到对应芯片的设备树源码进行编译最后得到设备树文件。根文件系统的制作,通过 busybox来编译根文件系统,但是在编译完成后还需要根据需要创建必须的目录文件,否则将不能正常使用。这部分的学习主要是学习遇到问题和解决问题的方法。

        在驱动程序设计开发阶段,主要学习了字符驱动开发的基本流程,上层一些功能函数需要底层驱动支持,临界资源保护操作,平台驱动。这里主要学习驱动的模块化编程,当写好驱动程序编译完成后,以模块的方式加载到内核,当不需要的时候从内核卸载驱动程序。通过对驱动的学习,了解到驱动的简单开发流程,能写简单的驱动程序。

        在学习的过程中,我也有一些不足之处。遇到问题很少询问老师,这也是我一直以来就存在的问题。我知道询问老师,可以及时解决问题,老师也可以得到学习反馈。所以我认为这是我以后需要改进的。

        以上就是我这近四个月对每个阶段学习的总结,总的来说,这段时间的学习使我专业技能掌握的更加熟练,整体能力得到提升。学习完后接下来就准备找工作了,在课程快要结束的时候,有就业老师指导简历制作,以及面试技巧。在我完成自己的简历后,我发给了自己的就业老师,就业老师指导我完善自己的简历。在以后的职业规划中,还是先打磨自己的技术,在这个行业站住脚,认真对待工作,积极面对生活。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值