嵌入式学习(转)

 

嵌入式学习步骤
嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,冬雪终将化去,春风定会吹来。
具体步骤如下:
 
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.comwww.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 这些方便于多任务运行的操作系统较好 ! 建议你在学习之前先了解该系统的市场占有率 , 学东西得看看学完它之后到底有没有作为啊 , 否则 , 你就一辈子只有自己玩系统啰 ...
 

你可能感兴趣的:(嵌入式,wince,嵌入式操作系统,linux,汇编,linux内核)