嵌入式学习步骤
嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,冬雪终将化去,春风定会吹来。
具体步骤如下:
1
、《
C
语言》第二版
谭浩强
;
《
C
程序设计语言》第二版
徐宝文译
机械工业出版社
你能区分开指针数组和数组指针吗?你知道函数指针吗?
你能区分开定义一个变量时系统给它分配的空间与用
malloc()
函数给一个变量分配的空间有什么不一样吗?
2
、《数据结构》
C
语言版
黄国愉、叶乃青编 清华大学出版社
你能合上书本,用
C
语言实现书中的单链表、双链表数据结构吗?
3
、《实用
C++
程序设计》第二板
中国电力出版社
Steve_Oualline
著
此阶段主要是学习其面向对象的编程思想,加深对
C
语言和数据结构的理解。
4
、学习单片机,最好能找个前辈带一带。
你能用
51
单片机做出一样实际的东西吗?即使它再简单!
要注意加深对中断的理解。
5
、学习
ARM
单片机。
(1)
、细读《
ARM
微控制器基础与实战》周立工编写(注:即使你不用书中的开发板)
(2)
、细读相关芯片的原版英文文档。如:
arm920TE.pdf
S3C2410_1.2.pdf
6
、学习
uCOS!!
操作系统。
(1)
、细读《嵌入式实时操作系统
uC
/
OS
-
!!
》第二版 召贝贝译
你能把
uCOS!!
移植到自己的平台上吗?
(2)
、能编写在
uCOS!!
操作系统环境下运行的针对具体硬件的驱动程序
7
、熟悉L
inux
环境,学习L
inux
环境编程,学习交叉编程
(1)
、细读《
linux
命令大全
.pdf
》
(2)
、细读《
GNU Make
使用手册(中译版)
.pdf
》
(3)
、学习创建交叉编程环境.
8
、学习
Linux
操作系统。
(1)
、《
UNIX
环境高级编程》
(2)
、细读
“joyfire
笔记
”
,可在
“www.qianrushi.com”
网站的好书下载栏目获取
(3)
、细读《
linux
内核完全注释》
(4)
、细读《
understanding the linux kernel 2
》
(5)
、利用源代码阅读利器工具"
Source Insight
"进行真正的
linux
内核原码刨析
(6)
、最后进行内核移植,并能编写在
linux
操作系统环境下运行的针对具体硬件的驱动程序
9
、学习
Linux
设备驱动编写。可参考《L
inux
设备驱动程序》
10
、复习
C++
,学习用
QT
进行图形界面编程
(1)
、细读《
QT
编程宝典》
(2)
、学会通过查看
QT
电子文档进行
QT GUI
实地编程
(3)
、学习交叉编程.(其实就是把命令
qmake
变为
tmake
)
11
、当然,你也可学习一下
PCB
的制作和设计一个自己的
CPU
(即软壳)
在嵌入式软件方面最重要的课程包括:
(1)
嵌入式微处理器结构与应用
:
这是一门嵌入式硬件基础课程,我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对
ARM
处理器工作原理和接口技术有充分了解,包括
ARM
的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉
ARM
处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书
(xxx Specification)
,你必须能看懂其中的内存分布和端口使用等最基本的说明(就像
x86
汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理
器课程较枯燥,这主要是硬件课程都较抽象的原因。还有同学对
ARM
汇编不感兴趣,以为嵌入式开发用
C
语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的
C
语言代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如
Bootloader
等(可能还包括
BSP
)。特别是在对速度有极高要求的场合(如
DSP
处理器的高速图像采集和图像解压缩),目前还会用到汇编写程序的
,
尽管用到的机会相对
C
要小得多。当你在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时你就必须看懂汇编程序,否则软硬件人员可能就无法交流。很多嵌入式职位招聘时都要求熟悉汇编。
[
小知识
]
目前嵌入式处理器常见的有
ARM
、
PowerPC
、
MIPS
、
Motorola 68K
、
ColdFire (
冷火
)
等,但
ARM
占据了绝对主流(有资料说手机中几乎
90%
都是
ARM
处理器)。
ARM
是一个只卖知识产权的公司,目前获得购买了
ARM CPU
核授权许可的大公司很多,包括
Intel
、
Samsung
、
Amstel
、
Motorola
、
Philip
等,他们都在
ARM CPU
核的基础上进行了一些外围扩展,形成自己的处理器(如
Samsung S3C2410
,
Motorola i.MXL9328
等处理器都是采用
ARM 9
内核,指令一级是相同的)。而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于
SamsungS3C2410
的开发板,供最终用户使用或供教学实验。在
ARM
这个食物链上,
ARM
公司是大鱼,
Intel
、
Samsung
等公司是小鱼,而华恒等则是虾米,最终用户(我们这些要采购嵌入式开发板的)则是喂虾米的。
Intel
早期生产的是低端
ARM(Strong ARM
,相当于
ARM 7),
现在转向主要生产高端
ARM(
即
Intel Xscale
处理器
,
属于
ARMv5
家族,主要用在高端
PDA
上
,
如
HP
和
DELL
生产的
PDA
都采用
Intel Xscale
,价格较高
)
。目前应用最多的是
ARM 7
和
ARM 9
两类处理器。
ARM 7
较便宜,可跑
uclinux
(是一个不支持高级内存管理功能的嵌入式
Linux
系统统)、
Vxworks
、
uc/os II
等实时操作系统,但因处理器不带内存管理单元
MMU
(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑
Windows CE
,另外通用
Linux
中的某些内存管理功能也不能用在
ARM 7
上。
ARM 9
大都是一个带
MMU
功能的高端处理器,可跑
WinCE
或通用
Linux
的大多数功能。
ARM7
和
ARM9
的区别是在与体系结构上,前者是冯
·
诺伊曼结
构,后者是哈佛结构
——
指令和数据总线是分开的。以上是我的一点了解,可能有不对的地方。我们学院有十几套
ARM 7
开发系统(采用
Samsung S3C44b0x
开发板,主要用于嵌入式处理器结构、实时操作系统等课程实验用),
ARM 9
的系统好象也已经到了(采用的芯片我不知道也没去问),还有以前的十几套
MPC860
开发板(听说价格都很贵,很容易损坏),同学应爱护使用和珍惜这样
的实验机会。
(2)
嵌入式操作系统类课程
除了
WinCE
的实时性稍差外,大多数嵌入式操作系统的实时性都很强
,
所以也可称为实时操作系统
Real Time Operating System.
从事嵌入式的人至少须掌握一个嵌入式操作系统
,
这在嵌入式的所有技术中是最为关键的了。目前最重要的
RTOS
主要包括:
第一类
、传统的经典
RTOS
:最主要的便是
Vxworks
操作系统,以及其
Tornado
开发平台。
Vxworks
因出现稍早,实时性很强(据说可在
1ms
内响应外部事件请求),并且内核可极微(据说最小可
8K
),可靠性较高等,所以在北美,
Vxworks
占据了嵌入式系统的多半
疆山。特别是在通信设备等实时性要求较高的系统中,几乎非
Vxworks
莫属。
Vxworks
的很多概念和技术都和
Linux
很类似,主要是
C
语言开发。像
Bell- alcatel
、
Lucent
、华为等通信企业在开发产品时,
Vxworks
用得很多。但
Vxworks
因价格很高,所以一些小公司或小产品中往往用不
起。目前很多公司都在往嵌入式
Linux
转(听说华为目前正在这样转)。但无论如何,
Vxworks
在一段长时间内仍是不可动摇的。与
Vxworks
类似
的稍有名的实时操作系统还有
pSOS
、
QNX
、
Nucleus
等
RTOS
。
第二类
、嵌入式
Linux
操作系统:
Linux
的前途除作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会低。
Linux
本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性不强。
目前应用在嵌入式领域的
Linux
系统
主要有两种:
一种是专为嵌入式设计的已被裁减过的
Linux
系统,最常用的是
uClinux
(不带
MMU
功能),目前占较大应用份额,可在
ARM7
上跑;另一种是跑在
ARM 9
上的,一般是将
Linux2.4.18
内核移植在其上,可使用更多的
Linux
功能(当然
uClinux
更可跑在
ARM 9
上)。很多人预测,嵌入式
Linux
预计将占嵌入式操作系统的
50%
以上份额,非常重要。缺点是熟悉
Linux
的人太少,开发难度稍大。另外,目前我们
能发现很多教材和很多大学都以
ucOS/II
为教学用实时操作系统,这主要是由于
ucOS/II
较简单,且开源,非常适合入门者学习实时操作系统原理,但
由于
ucOS/II
功能有限,实用用得较少。况且熟悉了
Linux
开发,不仅在嵌入式领域有用,对开发
Linux
应用软件,对加深操作系统的认识也有帮
助,可谓一举多得。据我所知,目前
Intel
、
Philip
都在大搞
ARM+LINUX
的嵌入式开发,
Fujitum
则是在自己的处理器上大搞
Linux
开发。目前在嵌入式
Linux
领域,以下几个方面的人特别难找,一是能将
Linux
移植到某个新型号的开发版上;二是能写
Linux
驱动程序的人;三是熟悉
Linux
内核裁减和优化的人。不过
LINUX
有一个硬伤,就是没有
WINDOWS
那样的友好方便美观
的交互界面,不然微软帝国早就守不住了。
第三类
、
Windows CE
嵌入式操作系统:
Microsoft
也看准了嵌入式的巨大市场,
MS
永远是最厉害的,
WinCE
出来只有几年时间,但目前已占据了很大市场份额,特别是在
PDA
、手机、显示仪表等界面要求较高或者要求快速开发的场合,
WinCE
目前已很流行(据说有一家卖工控机的公司板子卖得太好,以至来不及为客户裁减
WinCE
)。
WinCE
目前主要为
4.2
版(
.NET)
,开发平台主要为
WinCE Platform Builder
,有时也用
EVC
环境开发一些较上层的应用,由于
WinCE
开发都是大家熟悉的
VC++
环境,所以我院学过
Windows
程序设计课程的同
学都不会有多大难度,这也是
WinCE
容易被人们接受的原因,开发环境方便快速,微软的强大技术支持,
WinCE
开发难度远低于嵌入式
Linux
。对于急于完成,不想拿嵌入式
Linux
冒险的开发场合,
WinCE
是最合适了(找嵌入式
Linux
的人可没那么好找的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重点,
WinCE
还有两个特殊版本,一个是
MS PocketPC
操作系统专用于
PDA
上(掌上电脑),另一个是
MS SmartPhone
操作系统用于智能手机上(带
PDA
功能的手机),两者也都属于
WinCE
平台。在
PDA
和手机市场上,除
WinCE
外,著名的
PDA
嵌入式操作系统还有
Palm OS
(因出现很早,很有名)、
Symbian
等,但在
WinCE
的强劲冲击下,
Palm
和
Symbian
来日还能有多长?同学学过
VC++
后再学
WinCE,
非常方便自然,通过学习
WinCE
同样也可了解嵌入式软件的一般开发过程,对
Linux
有惧怕心理的同学也很合适。很显然,嵌入式
Linux
永远不可能替代
WinCE
,而且将来谁占份额大还很难讲,毕竟很多人更愿意接受
MS
的平台,就像各国政府都在大力推
LINUX
已好长时间,但你能看到几个
在
PC
机上真正使用
LINUX
的用户?据我观察
,
目前在嵌入式平台上
,LINUX
是叫得最响
,
但还是
WinCE
实际用得更多
.
嵌入式
LINUX
可能更多地是一些有长远产品计划的公司
,
为降低成本而进行长远考虑
.WinCE
和多媒体
(
如
MPEG
技术
)
是微软亚洲工程院目前做得较多的项目领域之
一
,
现在社会很需要精通
WinCE
的人。现在有
WINCE
的智能手机,金山词霸、
WORD
、
EXCEL
、
REGEDIT
等居然都有
smartphone
版的,
PC
上的
MP3
、
DOC
等居然在
download
时都可被自动转换成
smartphone
格式,很爽的。完全可用
Windows CE
自己开发一些需要的程序
download
到自己的手机上。现在市面销售
PDA
智能手机火爆,
MS
总是财源滚滚。
总结关于嵌入式操作系统类课程,若你觉得自己功底较深且能钻研下去,则可去学嵌入式
Linux
;若你觉得自己
VC++
功底较好且想短平快地学嵌入式开发,自学
WINCE
是非常好的选择。
(3)
嵌入式开发的相关领域
搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域包括:
A
、数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握
MPEG
编解码算法和技术,如
DVD
、
MP3
、
PDA
、高精电视、机顶盒等都涉及
MPEG
高速解码问题。
B
、
通信协议及编程技术:这包括传统的
TCP/IP
协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或
Internet
,所以首先应掌握
TCP/IP
协议及其编程,这是需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要的。无线通信协议包括无线
局域网通信协议
802.11
系列,
Bluetooth
,以及移动通信(如
GPRS
、
GSM
、
CDMA
等)。
C
、网络与信息安全技术:如加密技术,数字证书
CA,
以及各种网络安全设备
,
包括硬件防火墙
,
入侵检测
IDS,
还有防毒墙
,IPS
等
,
中国在这方面还是没有自己优势的
,
我们陈院长好象正在往这方面发展
.
D
、
DSP
技术:
DSP
是
Digital Signal Process
数字信号处理的意思,
DSP
处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件
专业的课程,对于搞软件的人若能了解一下最好。目前
DSP
人才较缺。如果有信号与系统、数字信号处理等课程基础,对于学习
MPEG
编解码原理会有很大帮助。
(4
)嵌入式开发的相关硬件基础
对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程是较重要的。另外,汇编语言、
C/C++
数据结构算法、特别是操作系统等软件基础课也是十分重要的。我们的主要目地是能看懂硬件工作原理,但重点应是在嵌入式软件,特别操作系统级软件,那将是我们的优势。我们的研究生里有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带
OS
,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在在一些速度要求较高场合,有不少公司是将一些
DSP
算法,如
MPEG
压缩解压缩算法等用硬件来实现,这就涉及到
HDL
数字电路设计技术及其
FPGA/IP
核实现技术,这方面的人目前市场上也很缺。
学习嵌入式系统的
10
点建议
现在
,
国内似乎在进行一个全民学习嵌入式的运动
,
但据了解
,
很多人在整个学习的过程中
,
由于某些技术领域的空白或者是技术尚未成熟
,
再加上个人学习方法不正确
,
给个人的学习造成了极大的阻碍
,
遇到这种情况该如何解决
?
根据本人有限的学习经验
,
给学习嵌入式的人以下
10
点建议
:
1.
遇到问题
,
首先进入
baidu.com、www.google.com(
或是其他搜索引擎
)
搜索一下
,
任何一个嵌入式工程师都不敢否认
,
这是学习嵌入式最好的老师
!
2.
尽可能多的论坛
,
遇到问题
,
及时发贴
,
情况紧急的时候
,
可以在不同的论坛同时发贴
,
这样
,
并行处理你的问题也许会解决得更快些
.
3.
尽可能多的结交嵌入式高手
,
最好是在公司上班的嵌入式工程师
,
他们有一个优势
:
了解市场
,
了解业界的发展动态
.
和他们多混混
,
对尚未上班的学习者来说
,
是非常有必要的
.
4.
要经常进入一些好的嵌入式网站
,
尤其是一些国外的网站
,
去看看嵌入式的发展动态
,
并且
,
要把这些网站都收集起来
...
5.
如果可能
,
我建议大家在网上订一下电子刊物
,
这些电子刊物是按时发到你邮箱的
,
那些资讯都是最新的
,
可以说是很前卫的了
.....
如果资金允许,建议报名参加嵌入式培训班,比如比较有名气的海同嵌入式培训(
iotek.com.cn)。在培训公司可以很快的入门提高,这样可以更好的提高学习效率。
6.
相信自己的选择
,
相信自己行业的发展前景
,
要对自己的选择和自己的行业有浓厚的兴趣
,
这一点做不到
,
你就很难学到很高深的层次
!
7.
追求要执着
!
刚开始学习嵌入式系统
,
肯定会遇到很多问题
,
我当时也是这样
,
学了三个多月
,
好像一点进展都没有
,
我在怀疑
:
难道我不适合搞嵌入式
?
当时我也想过放弃
,
但心里太不甘心了
,
脚都踏出了一只
,
我不能就这样屈了
!
于是就硬上
,
不断的琢磨
....(
现在
,
终于知道什么是嵌入式
linux
了
,
哈哈
....)
8.
不要对自己要求过高
,
只要你比昨天进步了一点
,
你就离成功又近了一步
!
学习嵌入式也忌浮气燥
(
其实这一点
,
我最有感触
!),
也就是要踏实
.
9.
万丈高楼平地起
,
不要忽略了低层的东西
,
你越是学习到高层的技术
,
越是发觉低层的东西有用
,
这些大家以后会有所体会的
!
我大一学习
51
单片机的时候
,
感觉它没什么用处
,
大二学习
ARM
处理器
,
才知道
,
没有
51
的基础
,
可能还不知道要多花多少时间才能搞懂
ARM
的硬件
.
10.
系统的选型的问题
.
现在的开源操作系统已经很多了
,
并且也做得非常成熟
,
初学者也会为此而烦恼
.
目前较为流行的嵌入式操作系统有
:linux,winCE,VxWork,uC/OS2
等等
....
主要区别在于实时性的问题
.
如果你是搞自控
(
像我学习的专业
,
不过我不玩控制的
....),
学习实时性高一点的操作系统更有帮助
,
如
VxWork.
如果你想以后搞民用产品
,
如手机
,
机顶盒
,
终端设备之类的
,
学习
linux,winCE
这些方便于多任务运行的操作系统较好
!
建议你在学习之前先了解该系统的市场占有率
,
学东西得看看学完它之后到底有没有作为啊
,
否则
,
你就一辈子只有自己玩系统啰
...