嵌⼊式软件⼯程师前期职业⽣涯规划(转载)
ARM+路线,主攻嵌⼊式Linux操作系统及其上应⽤软件开发⽬标:
(1)掌握主流嵌⼊式微处理器的结构与原理(初步定为arm9)
(2)必须掌握⼀个嵌⼊式操作系统(初步定为uclinux或linux,版本待定)
(3)必须熟悉嵌⼊式软件开发流程并⾄少做⼀个嵌⼊式软件项⽬。
从事嵌⼊式软件开发的缺点是:
(1)⼊门起点较⾼,所⽤到的技术往往都有⼀定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此⾏。
(2)这⽅⾯的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕⼠以上的⼈搞嵌⼊式,主要是基于嵌⼊式的难度。但⼤多数公司也并⽆此要求,只要有经验即可。
(4)平台依托强,换平台⽐较⾟苦。
⽅法步骤:
1、基础知识:
⽬的:能看懂硬件⼯作原理,但重点在嵌⼊式软件,特别是操作系统级软件,那将是我的优势。
科⽬:数字电路、计算机组成原理、嵌⼊式微处理器结构。
汇编语⾔、C/C++、编译原理、离散数学。
数据结构和算法、操作系统、软件⼯程、⽹络、数据库。
⽅法:虽科⽬众多,但都是较简单的基础。不⼀定全学,可根据需要选修。
主攻书籍:the c++ programming language(⼀直没时间读)、数据结构-C2。
2、学习linux:
⽬的:深⼊掌握linux系统。
⽅法:使⽤linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看《深》,那主讲原理。看
⼏遍后,看《情景分析》,对照深看,两本交叉,深是纲,情是⽬。剖析则是0.11版,适合学习。最后深⼊代码。
主攻书籍:linux内核完全剖析、unix环境⾼级编程、深⼊理解linux内核、情景分析和源代。
3、学习嵌⼊式linux:嵌入式linux开发书籍
⽬的:掌握嵌⼊式处理器其及系统。
⽅法:(1)嵌⼊式微处理器结构与应⽤:直接arm原理及汇编即可,不要重复x86。
(2)嵌⼊式操作系统类:ucOS/II简单,开源,可供⼊门。⽽后深⼊研究uClinux。
(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。
主攻书籍:⽑德操的《嵌⼊式系统》及其他arm9⼿册与arm汇编指令等。
4、深⼊学习:
A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。
B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。
C、⽹络与信息安全技术:如加密技术,数字证书CA等。
D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。
说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是⼀种语⾔,⼀种⼯具,她还是⼀种艺术,⼀种⽂化,⼀种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读⼀些优秀代码也是有必要的。
注意:要学会举⼀反多,有强⼤的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练⾄少⼀种编程语⾔,并具有良好的逻辑思维。⼀定要理论结合实践。
不要⼀味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,⽐如宇宙,管理,⼼理学,⾳乐、游戏、科幻电影。还有⼀些不愿意做但必须要做的!
技术是通过编程编程再编程编出来的。永远不要梦想⼀步登天,不要做浮躁的⼈,不要觉得路途漫长。⽽是要编程编程再编程,完了再编程,再编程!等机会来了在创业(不要相信有奇迹发⽣,盲⽬创业很难成功,即便成功了发展空间也不⼀定很⼤)。
嵌⼊式书籍推荐:
Linux基础
1、《Linux与Unix Shell 编程指南》
C语⾔基础
1、《C Primer Plus,5th Edition》【美】Stephen Prata着
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)着
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌⼊式Linux应⽤程序开发详解》
Linux内核
1、《深⼊理解Linux内核》(第三版)
2、《Linux内核源代码情景分析》⽑德操胡希明着
研发⽅向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP详解》
3、《Linux内核编程》
4、《Linux设备驱动开发》(LDD)
硬件基础
1、《ARM体系结构与编程》杜春雷着
2、S3C2410 Datasheet
英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌⼊式系统――体系结构、编程与设计》
2、《嵌⼊式系统――采⽤公开源代码和StrongARM/Xscale处理器》⽑德操胡希明着
3、《Building Embedded Linux Systems》
理论基础
1、《算法导论》
2、《数据结构(C语⾔版)》
3、《计算机组织与体系结构?性能分析》
4、《深⼊理解计算机系统》【美】Randal E. Bryant David O”Hallaron着
5、《操作系统:精髓与设计原理》
6、《编译原理》
7、《数据通信与计算机⽹络》
8、《数据压缩原理与应⽤》
C语⾔书籍推荐
1. The C programming language 《C程序设计语⾔》
2. Pointers on C 《C和指针》
3. C traps and pitfalls 《C陷阱与缺陷》
4. Expert C Lanuage 《专家C编程》
5. Writing Clean Code
—–Microsoft Techiniques for Developing Bug-free C Programs
《编程精粹–Microsoft 编写优质⽆错C程序秘诀》
6. Programming Embedded Systems in C and C++
《嵌⼊式系统编程》
7.《C语⾔嵌⼊式系统编程修炼》
8.《⾼质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本⾝。算法,架构⽅式等都很重要。
嵌⼊式软件⼯程师学习路线
1、打好嵌⼊式软件编程的基础
这⼀阶段重点打好嵌⼊式软件编程的基础,包括
* 学习Linux系统的基本应⽤
* Linux的常⽤命令
* C语⾔编程基础
* 常⽤的数据结构
特别是C语⾔中对指针的理解和应⽤。这⼀阶段的主要⽬的是学习编程语⾔、开发环境、和培养⾃⼰的编程思维,为进⼀步学习嵌⼊式开发打下良好的基础。
2、学习ARM体系结构编程
这⼀阶段才是真正的嵌⼊式编程,⾸先我们要
选择⼀款嵌⼊式CPU和⼀款嵌⼊式开发平台,⽬前ARM 嵌⼊式CPU应⽤最⼴泛,这⼀阶段重点是
学习嵌⼊式CPU的裸机编程:
* 熟悉中断
* 定时器
* 串⼝
* NAND FLASH
* ⽹络控制器
* LCD屏、触摸屏
* I2C 设备
* SPI 设备
等常⽤嵌⼊式外围设备的硬件⼯作原理,以及如何使⽤C语⾔来编程、控制这些硬件。这⼀阶段除了
要学习对硬件编程之外,还需要学习嵌⼊式硬件的知识,但是对于嵌⼊式软件⼯程师来讲,重点是学习硬件的⼯作原理,在掌握硬件⼯作原理的基础上,对硬件进⾏编程控制。这和硬件⼯程师学习的侧重点有所不同。
这⼀阶段对应的学校的课程主要包括模拟电路、数字电路、微机原理和单⽚机。这⼀阶段重点是要看CPU的芯⽚⼿册,⼤部分的参考书也是对芯⽚⼿册的翻译。
3、学习嵌⼊式系统的构建
这⼀阶段主要学习带有操作系统的嵌⼊式系统的构建,包括系统的
启动流程
* Bootloader的⼯作流程
* UBOOT的编译
* 裁剪与移植,嵌⼊式Linux内核的裁剪、移植与编译
* 嵌⼊式根⽂件系统的定制
* BootLoader、内核和根⽂件系统的烧写
这⼀阶段的主要⽬的是掌握带有操作系统的嵌⼊式系统的构建和烧写过程,以及对嵌⼊式系统软件的总体构成有个整体认识,为我们接下来学习嵌⼊式应⽤和驱动开发打下坚实的基础。
4、学习嵌⼊式Linux应⽤程序开发
这⼀阶段主要学习上层的嵌⼊式Linux应⽤程序开发,包括
* 基于Linux多进程
* 多线程⽹络
* ⽂件与⽬录
掌握嵌⼊式Linux环境下应⽤程序开发技术。
5、学习嵌⼊式Linux驱动程序开发
这⼀阶段主要学习底层嵌⼊式Linux设备驱动程序开发设计,包括
* 常⽤的字符设备驱动
* 块设备驱动
* LCD设备驱动
* 触摸屏设备驱动
以及驱动程序开发中的核⼼技术。
6、完成⼀个综合项⽬
嵌⼊式技术关键在于理论和实践的结合,要能够学以致⽤,完成了以上的所有阶段的知识点学习后,到底有没有学会,会不会⽤,能不能应⽤所学知识来解决实际开发中的问题,我们需要来完成⼀个综合的嵌⼊式实训项⽬,例如:基于嵌⼊式Linux平台实现的飞⾏器、基于嵌⼊式Linux平台实现的智能机器⼈等,这些项⽬都综合应⽤了嵌⼊式开发当中的应⽤,驱动和QT开发技术。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论