嵌入式开发需要学哪些内容?
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术应用越来越广泛,在航空航天、军工、工控、医疗、电子、通讯、网络等领域得到广泛应用。
嵌入式技术也无疑成为当前热门的IT技术之一,也越来越多的人想学习嵌入式技术,加入到这个行业中来。那嵌入式都要学习哪些内容?学习路线是怎样的?下面我们一起来看看:
干货满满,建议先收藏起来~
嵌入式是一种软硬件的综合性技术,要学习的内容比较多,包括嵌入式软件、嵌入式硬件,以及相关行业、产品的专业知识等。
但是作为零基础入行,我们不可能,也没有时间和精力把所有的知识都学个遍,只需要掌握重点知识,尤其是一些不变的知识,然后再在工作中来拓展知识面,这样才能起到事半功倍的学习效果。
嵌入式软件工程师要做的事情就是根据产品需求,设计好软件并让硬件工作起来。嵌入式产品硬件部分,大体都是相同的,核心由CPU、RAM和FLASH几大部分组成,而软件会根据需求千差万别。
而产品的具体功能就需要由软件来实现,所以嵌入式软件设计的工作量会是硬件设计的4-5倍,对应的就是嵌入式软件工程师需求数量比硬件工程师大,而且嵌入式软件技术学习起来相对容易一些!
下面我们重点来看看嵌入式软件工程师的学习路线是怎样的。
第一阶段:C/C++、Linux 操作系统 、数据结构与算法设计C语言做为嵌入式领域的核心基础,其掌握好坏的程度直接关系到后面内容学习的深度,同时C语言也是企业面试中核心考察点之一。
Linux系统已经占有嵌入式操作系统的 90%市场份额,掌握 Linux 操作系统不仅为嵌入式系统开发和应用打下基础,也是为大数据、云计算等新兴网络服务业务提供重要支撑。
数据结构是面试中考察的一个重点,也是后期阶段项目和综合项目程序设计的基础,掌握一定数据结构和算法的思维,将有助于提升岗位竞争力。
本阶段需要掌握C/C++语言常用关键字的用法,熟练使用顺序、分支和循环结构设计程序 ;
理解C语言指针含义,能够熟练使用指针进行任意空间的操作,熟悉常用内存的分段机制 ;
理解一维数组空间和多维数组空间的使用方法,熟悉多维指针的逻辑特性和应用场景 ;
掌握C/C++语言函数的定义,理解函数重载的原理,熟悉函数指针的设计模式 ;
理解C++多态、虚类等面向对象的底层实现机制,了解C/C++语言编译器工作流程 ;
熟悉Linux操作系统常用命令和文件系统结构 ;
了解常用的shell编程方法,熟悉make和Cmake工具的使用和配置 ;
熟悉常用数据结构的特点,掌握链表的常用操作方法,理解栈和队列的特点和实现方法 ;
了解二叉树的常用性质,理解深度遍历和广度遍历的算法特征 ;
了解图中常用的算法设计思想 ;
掌握查找、排序的经典算法设计思想和程序实现,了解STL的数据结构特性等。
第二阶段:Linux 文件编程、Linux 多任务、Linux 网络编程、嵌入式数据库通过上一阶段的训练,在本阶段需要细化 Linux 操作系统下 IO文件操作,掌握Linux下文件IO和标准IO的内部原理,通过对动态库和静态库原理分析,掌握其嵌入式商业项目开发中模块化设计思维。
做为嵌入式应用开发工程师,多任务的资源管理、同步管理、互斥管理是重要的技能,也是面试时的热门话题。因此这阶段需要从Linux的进程和线程内存资源出发,剖析Linux下多任务的热点问题,掌握处理多任务编程。
随着智能家居、车联网、5G 通讯的普及,网络服务成为了嵌入式应用研发的重要方向,从各大网站上可以看得出对于网络编程的需求非常的大。
掌握Linux下文件IO和标准IO的编程方法,理解其各自特点和应用场景;
熟悉Linux下VFS设计思想,掌握常用系统调用的使用方法;
了解Linux下进程的状态和控制方法,父子进程、孤儿进程、守护进程、僵尸进程的特点;
掌握Linux下多进程控制程序方法;
熟练使用pthread库实现Linux下的多线程任务,理解多线程的互斥和同步的方法;
掌握Linux下常用进程间通信的方法;
理解socket编程,熟悉TCP、UDP客户服务器编程模型;
了解HTTP协议,了解select或epoll多路复用通信,理解libevent等反应堆设计模式;
熟悉使用版本控制工具,如git或svn工具。
第三阶段:Qt编程
工控、车载系统中Qt被广泛使用,这一阶段需要掌握商业Qt开发方法。
掌握Qt5、Qt6的特点,熟悉Qmake、Cmake环境维护方法
理解Qt信号和槽的工作原理,熟悉常用控件的使用和自定义信号和槽的方法
掌握Qt的常用布局方式和约束关系
理解Qt的进程和线程工作原理,能够使用Qt进行多任务处理
理解Qt的网络编程方法,熟悉Qt的自定义组件开发方法
第四阶段:ARM体系结构与接口技术
ARM 芯片目前发展趋势越来越迅猛,地球上每一个人身上平均就有3块 ARM 的芯片,本阶段重点学习ARM体系的结构,从底层了解CPU的运行机制,在掌握一些基础汇编后,为嵌入式底层开发打下坚实基础。
了解ARM 体系结构的编程模型,寄存器和常用汇编的使用场景;
理解CortexA和CortexM下的中端控制器工作方式,了解NVIC工作方式;
掌握stm32开发配置环境,理解flash和ram调试程序方式;
熟悉GPIO、EXTI、UART、IIC、Timer控制器工作原理和编程方式;
掌握ST公司的HAL库开发方法。
第五阶段:嵌入式Linux系统移植
做为硬件系统上的软件开发,交叉编译器的作用非常重要,要求在掌握交叉编译器工作原理基础下,能够熟悉常用的嵌入式开发中使用的工具选项,对嵌入式 bootloader有深入理解。
Linux内核是目前嵌入式主流的操作系统,需要掌握Linux内核源码结构,内核配置和编译及调试方法,熟悉BSP工程师的常用方法,也为后期学习打下基础。
嵌入式 BSP 工程师除了熟悉内核定制外,对于产品的文件系统也是工作的重头,要求熟悉常用的嵌入式根文件系统制作方法,掌握根文件系统的工作原理。
掌握嵌入式交叉编译器的常用工具作用和使用方法,熟悉常用工具选项的含义;
理解嵌入式编译、链接的原理,熟悉二进制文件和ELF文件特点和制作方法;
理解嵌入式Bootloader工作原理,掌握Uboot移植和使用方法;
理解Linux内核编译、配置、启动原理,了解常用BSP开发定制方法;
熟悉嵌入式小根文件系统的制作方法,busybox、buildroot、ycoto的制作嵌入式根文件系统的方法;
掌握嵌入式常用网络配置方法,熟悉NFS、Ramdisk、Yaffs2等文件系统方法。
第六阶段:Linux驱动编程这一阶段要求掌握 Linux 内核开发环境特点,能够独立完成Linux驱动模块开发环境搭建和编程。
字符设备是 Linux 驱动中占比大的设备,掌握字符设备驱动的编写方法,可以应付实际工程中大部分设备驱动开发,也为后面内核驱动子系统的学习提供。要求掌握linux字符设备核心结构和核心操作驱动接口编写方法,剖析源码,完成驱动的编程学习。
掌握Linux内核模块编程的方法和驱动模块开发的环境搭建方法;
掌握Linux内核下字符设备工作原理,熟悉file_operations结构体核心成员的使用;
能够熟练使用内核链表、红黑树解决应用空间和内核空间的需求;
掌握container_of原理,内核Kfifo结构的设计和使用方法;
了解内核中断控制子系统的结构,熟悉利用中断控制系统实现驱动异步事件的方法;
了解常用Linux上半部和下半部机制;
掌握Linux的设备树下的驱动设计方法,熟悉bus驱动设计思想。
以上就是嵌入式软件工程师要学习的主要内容,零基础入门学习嵌入式的话周期还是较长,门槛较高。自学的话,还是需要较强的学习能力和专业基础的。但是只要认真学习,循序渐进,一步步扎实学好,半年坚持下来,相信会成功上岸。
编辑
厚学推荐学校
网上报名
新闻资讯
更多>>-
国信安软件培训学校
2016-01-13
-
国信安软件培训学校
2016-01-13
-
软件开发web学习哪家好
2016-12-08
-
0基础学习软件开发可以吗
2017-01-12
-
iPhone开发工程师哪里有
2017-01-12