嵌入式软件学习问题汇总(一)什么是嵌入式?

简单聊聊

  这篇文章出自我的另一篇经验分享,主要介绍了嵌入式是什么,与单片机之间的关系是什么样的,与单片机之间的区别在哪里,应该两者之间学习上的差异是什么。嵌入式与PC计算机的关系是什么样的,两者间有什么区别。同时根据自己学习的经验,分析了嵌入式需要哪些预备知识,适合什么样的人去学习。其实这篇文章在之前的经验分享里面有提到过,但是实在拗不过自己的强迫症,一定要把问题单独拿出来再写一篇,作为嵌入式学习问题汇总的第一篇文章,当然我希望有更多的朋友去看我写的文章,去了解嵌入式。

什么是嵌入式?

嵌入式软件学习问题汇总(一)什么是嵌入式?_第1张图片

我对嵌入式的看法

  如果要了解嵌入式,大家必须要先了解什么是PC、什么是单片机。在我最早学习单片机的时候,天真的以为学单片机就是在学嵌入式,等到自己逐渐去了解嵌入式以后,才发现原来自己曾经那么可爱(单片机、嵌入式在学习路线、学习难度、学习周期上的差别还是很大的),为了让更多的嵌入式小白走出这样误区,下面简单介绍一下他们分别的概念,和学习上的差别。

单片机系统与嵌入式系统的差别

  要了解单片机,就要追溯到上世纪早期在没有大规模集成电路技术的时代,计算机的设计原理,那时的计算机CPU、随机存储器RAM、只读存储器ROM、各种外设I/O和中断系统ROM等这些都是分离在电路板的各个角落里。直到20世纪70年代左右,随着科学技术的不断发展,利用大规模集成电路技术把CPU和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,这个就是单片机。
  那么跟单片机先比较嵌入式有哪些不同的地方呢?单片机产品和嵌入式产品都是电子产品,整个SOC都以CPU作为核心内嵌各种存储器,都有一些外围硬件作为辅助,也都是通过软件控制硬件。在功能上有很多的相似之处。但是在SOC性能上有非常巨大的差别,例如在内存方面,嵌入式系统的SOC明显比单片机大很多。现在将单片机与嵌入式系统SOC内存资源进行比较(顺便与PC机SOC进行比较):
  1、一般单片机系统中内存需求小,而且希望开发尽肯能的简单,因单片机SOC内嵌小容量的SRAM加小容量的NorFlash。
  2、嵌入式系统内存需求大,因为大容量的Norflash相对较贵,因此嵌入式SOC一般采NANDFlash+Dram+Sram+少量Srom。
  3、一般PC机都是:小容量的NorFLash+大容量的硬盘(类似于Nandflash)+大容量的Dram。
  可见在硬件上三者之间就存在较大的差别。
  嵌入式系统和单片机系统在CPU方面也是有一定差异:是否有MMU(分页内存管理单元,它是一种负责处理CPU的内存访问请求的计算机硬件),当然操作系统方面两者也具有一定差异,单片机系统因为内存资源较少的缘故,因此在操作系统移植方面一般只能跑一些简单的RTOS,像51单片机这样的简单SOC甚至连一些轻量级的RTOS都跑不了,哪怕能跑也没人会用它去跑操作系统(有朋友跟我说能跑,他跑过,纯粹是自己在玩呢,是不是),而嵌入式系统就比较牛了,一般在嵌入式系统中都会跑Linux、Android操作系统。(一般分需不需要比较友好的人机交互界面,不需要的一般都是跑LINUX,像平板、手机一般都是跑的Android,当然Android是基于Linux内核的,这个大家也要了解一下)最后,单片机与嵌入式在应用领域也是有较大差异的,单片机一般应用在操作简单的智能家电(如智能台灯),嵌入式一般运用领域较广(例如工业领域、汽车、航空航天等等都需要嵌入式)。这也是我们学习嵌入式的原因所在。

PC系统与嵌入式系统的差别

  好了分析完单片机与嵌入式的差别,我们再来了解一下什么是PC机,PC机与嵌入式的差别体现在哪?
  PC是什么呢?PC指的就是个人计算机,它是指一种大小、价格和性能适用于个人使用的多用途计算机(这是PC机的一大特点即通用性)。台式机、笔记本电脑到小型笔记本电脑和平板电脑以及超级本等都属于个人PC机。
  PC与嵌入式在硬件的差异在上面我们分析过了,现在我复制粘贴一下:
  1、嵌入式系统内存需求大,因为大容量的Norflash相对较贵,因此嵌入式SOC一般采NANDFlash+Dram+Sram+少量Srom。
  2、一般PC机都是:小容量的NorFLash+大容量的硬盘(类似于Nandflash)+大容量的Dram。
  说实话个人PC机在内部资源上是优于嵌入式系统的,但是这不是PC与嵌入式最大的区别,下面我附嵌入式的定义给大家看看:
  嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
  其实很多学弟学妹表示自学比较困难,这是正常的,看到这么一大串晦涩难懂的文字定义,换谁都很难看下去,下面给大家解释一下:嵌入式系统与PC在分层上是很相似的:都分为硬件层、中间层、系统软件层和应用软件层组成,那么他们差别在哪呢,看上面定义有一句话非常关键:“软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统”,软硬件可裁剪,这是嵌入式最显著的特点,嵌入式系统可以根据对系统功能要求的不同在软件及硬件上做出扩展或裁剪。更大的一个特点在于嵌入式系统是“专用计算机系统”,而PC机是通用的计算机系统,这体现在哪呢?举个例子:“你是一个嵌入式软件开发工程师你用的电脑是Thinkpad x1,你朋友可能是个牙医,他能不能也用Thinkpad x1呢,他当然也可以。”而嵌入性系统就没有这样的通用性:“你做的一款在挖掘机里面的嵌入式系统和他用来给病人拔牙的嵌入式系统是不可能通用的”。

单片机与嵌入式在学习模式上的差别

主流的芯片平台:

  主流的单片机平台有:51单片机、PIC、STM32、AVR、MSP430等等。
  主流的嵌入式平台有:ARM、PPC、MIPS等

开发模式的差别

  在开发模式上,两者有哪些区别呢?
  1、单片机开发多为裸机开发,程序规模小,多为单个程序员独立开发,在做一下比较复杂的产品时,也是会用到一些高端的电片机例如:基于ARM cortex-M3 架构的STM32系列单片机,并可以在单片机中跑一些简单的RTOS(例如UCos、FreeRTOS等)。
  2、嵌入式开发几乎全部基于嵌入式操作系统,目前使用Linux与Android系统。

编程语言的差别

  编程语言方面的差异:单片机主要使用C语言(少有汇编),与标准C略有不同,在结构体、指针、共用体及它们与数组的结合等C语言高级特性方面使用较少,而嵌入式则不同,嵌入式软件开发主要有分为底层、应用层。底层多使用C及汇编(并且高级特性运用较多)。应用层则多使用C++、JAVA等高级语言,嵌入式针对基于C语言的数据结构、算法运用能力要求较高。

软硬件组成的差别

  在软硬件组成方面:单片机学习多涉猎到简单的外设(如Uart串口、I2C、ADC、LCD、GPIO等)而嵌入式系统则会涉猎到更多复杂的外设(如有线网卡、WIFI、蓝牙、TCP、USB、音视频图片的编解码等),这些复杂外设在单片机裸机程序下是很难去写出来的(不是写不出,是没必要写出),在操作系统下,本身是提供相关基础架构及库函数的。

嵌入式到底适不适合你学?

嵌入式软件学习问题汇总(一)什么是嵌入式?_第2张图片

嵌入式学习与编程语言和英语水平的差别

  在编程语言方面嵌入式开发主要使用C语言,有的朋友会问我:我C语言一窍不通能不能学习嵌入式?我认为是可以的,不过前提是先去学习一下简单的C语言基础,不需要你学的特别精深,但是基础的知识内容还是要懂的。当然嵌入式开发还会用到汇编语言,这个可以在学习嵌入式裸机的时候边学裸机边学ARM汇编(没必要吧汇编学的太精通,当然如果你有的是时间,那当然多多益善),在嵌入式中间层的开发上会用到C++多一些,个人建议用到哪一步学到哪一步,不建议把C\C++\汇编\java都学好再来看嵌入式(那都猴年马月了),应用层会用到其他各种高级语言(难道你都要挨个学一遍?),其实你能把C学精学好,就OK了,其他语言用到的时候几天就能学到不错的程度。
  嵌入式学习与英语的关系(这个还是蛮重要的,因为很多朋友都反映英语水平不好,是不是不适合学嵌入式):我想说的是英语非常重要,需要你去积累学习,因为首先一点,我们编程时用英语写,但是C中关键是在于关键字,这个在编程的过程中大都就记住了,那么嵌入式学习英语的重要性体现在哪?在阅读Datasheet上,那么有朋友就会觉得自己英语不好就不适合嵌入式学习了,这是不对的,我英语也不怎么好,前期我们看datasheet可以依赖于桌面词典嘛,虽然阅读起来速度会很慢,但不失为一种办法,在后期慢慢积累的过程中,我们的英语水平和看文档的能力就好不断提高了。so,英语不好不是学不好嵌入式的理由,这个世界上不存在笨人,只存在懒人。
  下面补充一点:嵌入式学习数电模电等等这些专业课的关系,首先嵌入式分为嵌入式软件和嵌入式硬件两部分,嵌入式硬件的学习是离不开十点数电模电、电路这些专业课的,甚至相关的微积分计算、复变函数计算、基本的傅里叶变换、拉式变换和Z变换都是要了解的,当然掌握了基本计算方法以后可以利用MATLAB软件进行运算。嵌入式软件学习的话对硬件专业方面的需求不那么紧张,但是软件设计也是需要硬件辅助的,总而言之模电数电这些专业课程的学习对嵌入式学习是有影响的,但不是必须去专门学习。可以通过后期的积累慢慢总结学习。

哪些专业的朋友更适合嵌入式学习

  有的朋友本来是学外语专业的学文学专业的,感觉嵌入式是个未来的大趋势,就打算跨行学习,我觉得这不是不可但是很难,为什么难呢?你想想你跟学外语专业的,对计算机领域可能一窍不通,对一下基本的名次都没有太多的概念,你说你学起来难不难,固然很难,但不是不能学,也有很多跨行来做软件开发的一样可以做到很好。这个还是个人的,那么接下来分析一下那些专业更适合嵌入式的学习:自动化专业(我就是学这个专业的,想了解我的学习历程可以去看我的另一篇经验分享文章,写的很详细)、电子信息类专业、计算机类专业、测控类专业、机械电子类专业都可以。
  总的来说,我认为任何事物的学习最关键的都不是专业,你是不是这个专业的与你以后将要学习什么事物是没有必然联系的,有必然联系的是你自己的态度和你是不是对它有特别大的兴趣(尤其是技术性很强的学科,你不喜欢他,他就是再好你也不一定能学的进去),当前你能学到什么程度这取决于你的毅力,你会学的多快这取决于你的学习能力和专注程度,所以朋友们一旦决定要学习它,就请拼劲全力吧!

最后

  最后,如果你看完觉的有一点点的收获,麻烦朋友可以为我点个赞,已让更过的朋友可以看到。有问题可以在评论区评论,我懂的地方会单独做些文章来解释,或者直接在评论区恢复,希望各路朋友多多支持,身为一个刚刚接触嵌入式软件学习不久的小白,希望能通过这个平台寻找更多志同道合的朋友前辈。

你可能感兴趣的:(嵌入式软件学习问题汇总)