|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
l. R0 r# l8 j* H4 G+ z/ r
, N+ Z7 z* C8 Z! w. p- w$ g( B1 y3 s4 X% \ B0 p' K t+ s6 g& w3 ~. }
嵌入式技术是各种电子产品的核心技术,也是工业4.0、远程医疗、3D打印等新兴产业的核心技术,具有广阔的发展前景。很多计算机、电子信息类专业的学生都想把嵌入式开发作为自己的职业目标,但是因为嵌入式涉及的知识太多,太杂,太广,很多嵌入式初学者陷入嵌入式知识的海洋中,东学一点,西学一点,找不到学习的方向。 作为过来人,想给大家谈谈正确的嵌入式学习路线,供各位嵌入式初学者参考,希望对大家有所帮助。
6 z ]9 k* U' ]7 \) W1 j1 E& ^: A2 E5 L8 W
! R# |) y+ o) Q, \# \$ G2 U9 u" A3 l6 L1 s, p6 O4 k- _0 m
嵌入式工程师需要掌握的内容非常广泛,主要包括嵌入式软件、嵌入式硬件、以及相关行业、产品的专业知识。作为嵌入式初学者,我们不可能,也没有那么多精力把所有的知识都搞的很精通,要学会抓住重点,学会取舍,达到一通百通,事半功倍的学习效果。 6 j! h2 n" C. W% J( A( n. e {# w! v* E+ I: _! O% Q
& [8 n& Z+ E6 d8 c }, I/ q3 P5 f: Q9 P3 J; {6 H9 W9 Y, P4 b1 G x U U# S
首先嵌入式技术主要分为嵌入式软件和嵌入式硬件2大方向。" V% U+ f7 ~. A. f
6 r5 ^& g. Q5 T% T1 @2 B: x/ @; R* D" w" `3 G; Y0 m
0 O6 }1 D- U1 e( a) }: R$ y- C嵌入式硬件方向 1 W( a9 J3 `3 N I/ i0 h: u( N9 \8 T' @+ u6 O
6 n! a3 @$ l: b, p l4 Z0 K: M/ Q7 @
& @1 Q9 i, d0 k* X2 w- V# j3 R嵌入式硬件工程师主要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力。因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。 一个资深的嵌入式硬件工程师年薪都在10万~ 30万之间。 " s4 l& B7 ]. N4 U5 M7 U3 m; I; G8 q! Q0 M
; I8 C$ F+ U; q6 V* m. P- K
6 n5 e0 o5 g2 k' u: j5 w+ j/ r
5 a% K0 f* @$ R: A& ^5 N要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验。嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析。 . |! j, f) C+ s& J, \9 W/ U8 L% |5 S2 R; \/ G/ |& n* F
' N7 D; ^! u6 i/ g; R1 w& T
9 z9 h# J& U' `6 n# s8 ?: ?
嵌入式软件方向 3 ^9 v8 S+ p9 j+ A+ ?4 K+ m a) `: I y
& B6 y( @& f: t O6 _1 N9 g0 k; I
8 `$ U( p* g& U: L0 U9 H/ _) P) f* U+ C% @
嵌入式软件工程师的职责主要是根据产品的功能需求设计好软件,让硬件工作起来。嵌入式电子产品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4~5倍。所以一般情况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需求比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来相对容易些,所以这里我重点和大家谈一下嵌入式软件工程的学习路线。
' \; x( s; j- E
/ h3 _7 Z) B& ~+ o4 T, h8 {+ n9 M/ T ~2 v7 ^6 W; F
) N1 ~3 r( t; K8 T2 o嵌入式软件工程师学习路线 + V+ W5 ]4 Q! X# T6 ]5 }7 q; ]( D7 i- ~6 i% N
3 Y/ A7 {; B: O* Z0 ]% y! Y; H: {
`* q; a* g1 Q6 ^ C6 d
1、打好嵌入式软件编程的基础# p6 z6 g2 r3 c$ m
% L; H" z" H# k6 B$ g. b4 C
, s/ X8 W7 k- V这一阶段重点打好嵌入式软件编程的基础,包括学习Linux系统的基本应用,Linux的常用命令、C语言编程基础、常用的数据结构。; C! ]7 U. ~9 ^+ L% q: M# e: \) k2 a3 W
, q! z2 _& t) k' Q0 ?8 Z2 C% m! r. M V# }
- d) }$ H. n" r4 ^特别是C语言中对指针的理解和应用。这一阶段的主要目的是学习编程语言、开
- h) r9 Z4 ~5 K. f发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 这一阶段推荐的嵌入式学习书籍如下:《C程序设计语言》,《C语言核心技术》,《数据结构与算法分析--C语言描述》,《C和指针》,《C陷阱与缺陷》,《C++ Primer》 0 N |" g3 d5 v% A& y& B. e: I; X4 y4 N# m
, a; e5 Q4 \2 } `0 }. o
3 M3 i% ^ `9 e8 v6 `& y4 ? - O$ D! z# E9 m" X& T P+ t6 W+ G0 U" I- M2 r+ u/ v
2、学习ARM体系结构编程
& A5 U: F( p0 D; A# M" K1 k
' c/ O8 Z- M2 V* _% b Z( e) s8 k- D7 q
2 c6 I4 ?4 H8 r6 P5 D' D7 `这一阶段才是真正的嵌入式编程,首先我们要选择一款嵌入式CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛,这一阶段重点是学习嵌入式CPU的裸机编程,熟悉中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等常用嵌入式外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。这一阶段除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识,但是对于嵌入式软件工程师来讲,重点是学习硬件的工作原理,在掌握硬件工作原理的基础上,对硬件进行编程控制。这和硬件工程师学习的侧重点有所不同。这一阶段对应的学校的课程主要包括模拟电路、数字电路、微机原理和单片机。这一阶段重点是要看CPU的芯片手册,大部分的参考书也是对芯片手册的翻译。推荐的参考书籍如下:《ARM嵌入式系统开发--/ v# O; K% m1 v& u5 j3 l$ e% q& w% H; I' G6 Y6 z
软件设计与优化》。' K7 D0 C* j3 b* j5 n, s8 G
* k9 ~. O4 W, n8 U# p0 D/ G$ i# ]7 \) X8 ?* x
$ N6 ^, d" i3 J' f) f s' z6 F5 S; s- \% f+ U. _# Q. T% x1 M! i# e
3、学习嵌入式系统的构建 7 ?# [, P5 h; d: w9 m
0 `3 I4 l+ X- p' t: `0 w) x* |6 P
' o0 r' o$ s8 |9 L/ G" s4 [, B. L) o, M4 n1 B& h F$ c9 D `
# B$ l% j6 u1 U1 s2 d& L. A0 t这一阶段主要学习带有操作系统的嵌入式系统的构建,包括系统的启动流程、Bootloader的工作流程、UBOOT的编译、裁剪与移植、嵌入式Linux内核的裁剪、移植与编译,嵌入式根文件系统的定制、BootLoader、内核和根文件系统的烧写。 这一阶段的主要目的是掌握带有操作系统的嵌入式系统的构建和烧写过程,以及对嵌入式系统软件的总体构成有个整体认识,为我们接下来学习嵌入式应用和驱动开发打下坚实的基础。 这一阶段推荐的书籍如下:《构建嵌入式Linux核心软件系统实战》 7 u2 e0 _4 _; G# N! l) ?6 M9 ]" y7 G% Y
: V1 l/ g3 l2 L9 a
/ I- A7 ^: o/ f* a9 L4、学习嵌入式Linux应用程序开发 * l* ~0 l+ t6 w1 `6 j4 ^* Q2 n- W! c* m
! ^! a* {: `0 `( j+ v
0 g* M3 @) k/ I/ K
y6 E; |, d) ?: z$ v这一阶段主要学习上层的嵌入式Linux应用程序开发,包括基于Linux多进程、多线程、网络、文件与目录和QT编程。掌握嵌入式Linux环境下应用程序开发技术。这一阶段推荐的书籍有: 《UNIX环境高级编程》, 《Unix网络编程》,《Qt Creator快速入门》, 《精通Qt4编程》 / F: S+ y7 k) Z* k! \0 o0 u& c6 {' |' i% I# v! J
9 ]& L* h# x* g8 f2 a. \6 W
) V# I7 z! T, t# Z2 [' O' a7 g
5、学习嵌入式Linux驱动程序开发 1 T8 u# E7 P9 e
* f Y, n0 i5 G- e5 [& B* l5 h' R0 p$ S# @2 L0 u) a
7 S3 ]' h" Y! m3 ~. W. r8 t9 j
这一阶段主要学习底层嵌入式Linux设备驱动程序开发设计,包括常用的字符设备驱动、块设备驱动、LCD设备驱动、触摸屏设备驱动以及驱动程序开发中的核心技术。这一阶段推荐的参考书籍有:《Linux设备驱动程序》,《Linux设备驱动开发详解》7 g# B) x" j4 @% ?
m9 k: G; P) ^/ K3 W4 s0 `% b+ f, b( V5 F+ ?; v& h' j+ X# r; E" j
6、完成一个综合项目( {! c% f$ W5 v- \ {" f8 ?
$ v: g. v, `! r+ p1 y
4 ~0 [8 E r4 l4 ?
嵌入式技术关键在于理论和实践的结合,要能够学以致用,完成了以上的所有阶段的知识点学习后,到底有没有学会,会不会用,能不能应用所学知识来解决实际开发中的问题,我们需要来完成一个综合的嵌入式实训项目,例如: 基于嵌入式Linux平台实现的飞行器、 基于嵌入式Linux平台实现的智能机器人等,这些项目都综合应用了嵌入式开发当中的应用,驱动和QT开发技术。 2 q$ m( k M$ }. n" v1 N9 y2 W! e9 C( A' @) O' Q" c
& F0 e1 F/ f+ [
# v* `8 `% @9 i( b0 [ y3 \- N
! I; M9 S( m' ]! a6 b以上就是我建议的比较系统的嵌入式学习路线。系统学习并能灵活应用以上知识后,嵌入式基本上就算入门了,具备企业项目的嵌入式研发能力了,这时候去应聘企业的嵌入式研发工程师岗位就不会有什么问题了 | 0 C$ d# {$ ~$ x, H7 ?) ^
|
|