嵌入式学习常见问答
2013-08-20

1、嵌入式 C 与一般 C 的差异
a.特别注重如何用 C 语言控制硬件:
        一般 C 语言不需去控制硬体,不过嵌入式 C 语言需要学会如何用程式去控制硬件。  
b.特别注重执行文件底层工作原理:
          一般 C 语言只要能编译出执行文件,放到 Windows 上跑即可。嵌入式 C 语言会详细介绍执行文件运作时的底层原理。如:“负数”在电脑内如何表示的问题。一般程式员只要能写出“-2”就可以了。嵌入式 C 语言工程师需要知道,在电子电路层面上,是根本没有“负号”这个观念的,电子电路只能用“0” 与 “1”来表示负数。如何做到这点,就是我们嵌入式 C 语言课程内容会教的。
c.特别注重 C 语言中的”条件编译“:
         一般 C 语言工程师,他们执行档硬体平台只有X86 一种,所以他们编写代码时,不用考虑到这份原始码可能会移植到不同硬件的情况。但要写到一份代码能在千万种不同硬件上跑起来,就是功力了。因此,写嵌入式 C 语言的工程师,会大量运用一大堆 if ~ then 的条件判断,让代码编译成执行档时,会根据目标硬件的不同,编译出不同硬件平台的执行文件。而这种方式,就称为”条件编译“,乃嵌入式软体工程师特别需要训练的能力。


2、嵌入式与linux之间的关系
        目前嵌入式开发环境主要有:linux、wince和VxWorks;而目前公司普遍采用的是linux,因为其开源、操作方便灵活,所以被嵌入式开发者们所广泛使用。Linux用来编写代码,在linux环境下通过交叉编译工具编译成ARM处理器可以识别的机器指令。对于嵌入式开发人员来说,不必过多的去掌握linux操作系统,在开发人员的眼里,linux只是一个开发工具,就像我们使用XP、win7操作系统一样。

3、ARM相对于单片机的优势
        单片机目前主要使用在那些产品上?单片机属于嵌入式设备,基本上很少会运行操作系统。属于嵌入式产品中比较低端的应用。如电饭锅、热水器等家庭常用电气。因为这些产品的价格相对低廉,而产品销售价格低,那么他的开发成本自然就低,从事开发的技术人员工资就会受限制。ARM是32bit处理器,可以运行操作系统,如嵌入式Linux,vxworks、windows mobile、ucosII,属于嵌入式高端应用,嵌入式系统现在和未来的主流和趋势。如手机,数码相机。示波器。逻辑分析仪,彩超机,飞机控制系统,卫星等等。技术含量高,薪资相对比较有高,但门槛高学习需要一个周期
      学习嵌入式的优势
(1)目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。

(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。搞企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而言,搞嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事。所开发的产品通常是通用的,不会因客户的不同而修改。一个产品型号开发完了,往往有较长一段空闲时间(或只是对软件进行一些小修补),有时间进行充电和休整。另外,从事嵌入式软件的每个人工作范围相对狭窄,所涉及的专业技术范围就是那些(ARM、RTOS、MPEG、802.11等),时间长了这些东西会越搞越有经验,卖卖老本,几句指导也够让那些初入道者琢磨半年的。若搞应用软件,可能下一个客户要换成一个完全不同的软件开发平台,那就苦了。

(3)哪天若想创业,搞自已的产品,那么嵌入式是一个不错的主意,这可不像应用软件那样容易被盗版。


4、嵌入式方向会与硬件知识有很大关联吗?
        硬件方面我们要求要看懂DATASHEET的时序图,其它嵌入式开发涉及到的硬件知识我们在课程中会讲到

5、为什么有人说IT行业不好找工作?
1、 在学习的过程中,是否做过真正可以应用到实践中去的事情?真正可以应用到实践中去的事情,不一定非要有工作经验,别人所说的工作经验实际上是看你真正做过些什么相关的任务,比如 如果你真正做出过能运行的Linux平台Email系统,说明你也有这方面的经验,具备这些东西,找一份2000多的工作应该不成问题。学IT,技术是根本,如果你连最基本的技术都不过关,那就不要怪用人单位不用你,或者即使用了,也不会给你高额的工资。因为现在的社会很现实,我们常说的一分钱一分货就是这个道理。
2、所会IT够专业吗?只是学习IT工具,缺乏对应用的理解,换句话说就是学得太肤浅。我们想对那些正在学习VB、 PB、 FoxPro 的技术人员上说一句,你还想在业余上玩多久?你不想走真正的专业的技术路线吗?在目前社会大环境影响,薪水普遍下降的同时,难道还不想赶快走上真正的专业路线吗?
3、选择要方向的时候不注重个性化,不仔细的分析就业前景,我们现在要做的事情是要问问自己,是不是跟别人一样? 传道有先后,术业有专攻,不要跟其他人一样,一窝蜂学习某某东西。社会上最缺乏的,永远是稀缺人才、专业人才。目前IT领域一直都缺少的是 操作系统底层开发者 UNIX/Linux下C/C++开发者 高端UNIX/Linux内核驱动工程师)


6、嵌入式产品开发过程简述
        嵌入式系统的设计与开发大部分工作都集中在软件方面。嵌入式系统在开发过程一般都采用 “宿主机/目标板”开发模式,即利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过串口/USB/以太网等方式下载到目标板上,利用交叉调试器在监控程序运行,实时分析,最后,将程序下载固化到目标机上,完成整个开发过程。
整个软件开发过程基本包括以下几个步骤:
1、    系统需求分析。确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。
2、    体系结构设计。描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分,以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。在这一步往往需要选定主要的芯片、确定RTOS、确定编程语言、选择开发环境(编程语言和开发环境在确定RTOS时也就跟着确定了)、确定测试工具和其他辅助设备。
3、    硬件/软件协同设计。基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。
4、    源代码编写:编写源C/C++及汇编程序;
    其中包括:
    4.1BootLoader移植
    4.2Kernel移植。内核移植又名最小系统移植,移植后的内核具备网络通、串口通、根文件系统可用等基本条件。
    4.3网络协议栈以及驱动程序开发。协议栈分为新协议的开发和基于已有协议设计新的处理例程;驱动包括字符设备驱动、块设备驱动、网络设备驱动。
    4.4应用程序的开发。C函数库(Uclibc/Glibc)、QT图形化应用程序开发、网络应用程序开发
5、程序编译:通过专用编译器编译程序;
6、程序下载:通过JTAG、USB、UART方式下载到目标板上;
7、软硬件测试、调试:通过JTAG等方式联合调试程序;
8、下载固化:程序无误,下载到产品上生产。
9.、功能测试、性能测试、系统集成测试、实验局、新产品发布


7、嵌入式培训之后前景怎么样?
       嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。
       正如我国资深嵌入式系统专家—沈绪榜院士的预言, “未来十年将会产生头大小、具有超过一亿次运算能力的嵌入式智能芯片”,将为我们提供无限的创造空间。
选择开发要比系统应用薪水要上升的更为迅速,而且更容易突破5000、8000或10000等每月的门槛,一年工作经验的从业人员平均薪资5000元左右,五年工作经验的一般月薪都在2万左右,但是这个方向难度会更大,同时会更枯燥些,需要“铁屁股”——能坐得住,一但真正入门,就会有很强的成就感,进入大公司也只是早晚的事。