1、嵌入式系统是相对于PC平台而言的,使用的平台一般是针对ARM,PPC,DSP等非PC平台的,所以使用的编译和调试工具不是VC6.0,而是不同的平台需要专门的编译开发工具,交叉编译是嵌入式特有的概念;
2、嵌入式系统往往指带有操作系统的系统,以前简单的系统可以直接在裸机(如51单片机)上开发,而现在OS成为嵌入式的一个基本特征,已经有各种实时内核或者全功能的OS,因此对程序员要求较高;
3、嵌入式系统往往包括软件和硬件两个部分,软件开发人员往往也需要知道硬件的知识,只有知道硬件的特性才能开发出高性能的程序。另外不想在PC上开发,驱动程序都已经有了,在嵌入式系统中由于所接的外设复杂,很多时候需要自己编写驱动程序,结果是在程序开发之前一般需要看硬件手册。
从上面的特点看出嵌入式开发与PC上的程序开发是不同的,在PC上开发主要是应用程序的开发,侧重想法,而嵌入式开发则要考虑软硬件各个方面而且通常要购买昂贵的开发板和仿真器,因此起点相对较高。
我接触嵌入式是在大四的时候,当时已经学习了微机原理、单片机和DSP等课程,我一直希望能做出一个完整的系统,所以第一次明白嵌入式系统是什么的时候就对它产生了浓厚的兴趣,然而兴趣是高,缺乏人指导,我依然还是菜鸟一个,认识到实践和长时间积累相当重要。我都是在课余自学嵌入式,嵌入式学习之路走得很艰难,其中积累了点点经验,总结如下:
1、嵌入式从何学起?
这是一个初学者很想知道的问题,然而又是很难回答的问题,我初学时也是一样的。学习嵌入式不能着急,我觉得最重要的还是打好基础,从简单的做起。其中的基本功主要有:
①微机原理和接口要很熟悉,至少知道一门汇编语言,不是要你去记指令,而是要弄清楚处理器执行的过程和常用的指令执行的操作;
②熟悉常用的体系结构。ARM架构处理器应用越来越广泛,值得研究一下,当然还有很多的体系架构,开发时再看硬件手册这个过程就是训练自己阅读手册和查询手册的能力,手册很长,往往只要知道个大概。细节需要在使用时查询;
③C语言编程:C语言大家都会用,我知道在学校学习时都是基于PC,基本不会用C语言程序访问寄存器或者外设,而在嵌入式开发时你会发现有很多地方需要小心,举个例子,一般中断服务程序需要访问的全局变量需要用volatile申明。
有了上面的基本功就可以开始最简单的嵌入式开发之路了。
2、不带OS的嵌入式开发
先不要急着看什么操作系统原理,那些东西如果没有开发经验的话不可能看得很明白的,首先还是找到嵌入式开发的感性认识。我推荐从51单片机开发开始,因为51单片机便宜而且网上有很多现成的代码可以参考,先编写一些简单的汇编语言程序,然后学习C51进行c语言编程这个过程关键是熟悉交叉编译和开发流程,熟悉访问硬件的方法,学习编写中断服务程序。另外,这个时期可以学习嵌入式c编程的注意事项,《c与c++嵌入式系统编程》《C陷阱与缺陷》是不错的书,值得看看。
3、带OS的编程
一旦运行了OS,编程难度加大了,思维和编程方法与不带OS的大不一样,这个转变是很艰难的。学习操作系统的原理是必须的,只有很好地认识了操作系统才可能进一步在OS上编程,比如进程、调度、同步和互斥、优先级翻转等。OS分成简单的实时内核和复杂的全功能OS,uCOSII是典型的实时内核,linux是典型的全功能的OS,不同的OS满足不同需求,要根据自己的设计来选择合适的OS。嵌入式很多处理要求是实时的,需要保证性,编写程序和选择OS要特别注意。推荐从uCOS入手,因为可以获得源码,而且网上有很多的资料,已经被移植到很多平台。到了这个时候估计自己可以自学了,要多做几个项目,在项目中摸索,要知道编写程序容易,但是要编写稳定可靠的程序绝非易事,有很多书值得一看。我目前也是在学习linux,开始编写驱动程序了,我想这还是一个开始,以后要学的东西还很多啊。