STM32(四)嵌入式浅谈与学习方法

今天我们聊聊有关嵌入式的话题。

零、嵌入式相关

  • 【嵌入式软件工程师】过来人给嵌入式软件工程师的十个建议

  • 【知乎】成为一个超牛的嵌入式软件工程师是种什么样的体验?

  • 【CSDN】一个嵌入式软件工程师的2016年总结

  • 【阿里云】嵌入式开发学习的几种线路图方向

  • 【百问网】韦东山老师的Linux_Android学习路线

一、嵌入式概况

        IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。
        嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
        从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
        嵌入式设备是一台专用的、微型计算机。由三个层次的相关内容组成:
                1)硬件,包括CPU(如ARM)、存储(如flash)、I/O(显示模块、通讯模块、视音频模块、I/O控制电路等)。
                2)系统级软件,主要是操作系统也就是OS,以及I/O软件如LCD、蓝牙、WIFI、CDMA、声音等子系统。
                3)应用软件,如基于Linux的应用开发,基于Android的应用开发,基于iOS的应用开发等。

二、嵌入式处理器分类

  •     嵌入式微处理器(单板机)
  •     嵌入式微控制器(单片机)
  •     专用处理器(DSP等)
  •     嵌入式片上系统(SOC、SOPC)

三、嵌入式系统

        计算机系统由硬件和软件组成,在发展初期没有操作系统这个概念,用户使用监控程序来使用计算机。随着计算机技术的发展,计算机系统的硬件、软件资源也愈来愈丰富,监控程序已不能适应计算机应用的要求。于是在六十年代中期监控程序又进一步发展形成了操作系统(Operating System)。发展到现在,广泛使用的有三种操作系统即多道批处理操作系统、分时操作系统以及实时操作系统。

        STM32(四)嵌入式浅谈与学习方法_第1张图片

        常见的嵌入式操作系统:μC/OS-II、 VxWorks、嵌入式Linux、Win CE……

四、发展前景

         嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。
         一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。
        另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果这类人对硬件原理和接口有较好的掌握,也完全可以写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可做的),所以软件研发人员完全不用担心在嵌入式市场上的无用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是趋势。
       嵌入式领域较新,发展非常快,很多软硬件技术出现的时间都不太长(如ARM处理器、嵌入式操作系统、LINUX操作系统),大多数人没有条件接触或进入嵌入式行业,更谈不上能有机会接受专业人士的指导。因此,踏进这个行业的难度比较大,嵌入式人才稀缺,身价自然也水涨船高。
       权威部门统计,我国嵌入式人才缺口每年50万人左右。根据前程无忧网发布的调查报告,嵌入式软件开发是未来几年最热门和最受欢迎的职业之一,具有10年工作经验的高级嵌入式工程师年薪在30万元左右。即使是初级的嵌入式软件开发人员,平均月薪也达到了3000—5000元,中高级的嵌入式工程师月薪平均超过10000元。 做软件实际上有高下之分,开发语言从机器语言、汇编到C、C++,再到红透半边天的Java、C#等,该学哪种呢?为什么有些开发者工资低,而有些开发者千金难求?为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水?
       还是门槛,比如月薪15k的Linux嵌入式开发职位,门槛就有 Linux系统、Shell编程、Linux开发环境、C语言、ARM硬件平台、数据结构、Linux内核、驱动程序等,粗略数数就有8道关口,他需要非常熟悉整个的计算机体系,能做出实际的产品,而Java的开发者却仅仅是会使用名叫Java的语言工具,始终高高飘在众多层次之上,开发项目非常快,甚至可以不知道OSI模型,很可能自始至终都是软件蓝领。
       嵌入式开发本身也有高下之分,至少包含嵌入式应用程序工程师和底层的驱动内核工程师两种。前者同样是使用现成工具进行简单劳动,比如使用J2ME开发小游戏或者进行一些界面开发,而后者是根据芯片具体情况把操作系统(如Linux)移植到上面,同时编写必要的驱动程序,改写相应的内核代码。很显然后者是一个公司真正的技术核心。而技术核心的工资很可能是其他开发者的数倍。
       嵌入式开发突出强制和项目,学习不仅仅是学习几项技术,而是构建你的知识体系。比如学习嵌入式开发,就要从基础Linux,C语言,数据结构开始,到ARM,汇编,Linux内核、驱动等,更重要的是更多的项目练习,设计至少5个项目,多达10000行强制核心代码的编写可以让你真正获得知识。为进入外企或者出国做准备。未来的几年内,随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。美国著名未来学家尼葛洛庞帝99年1月访华时预言,4~5年后嵌入式智能(电脑) 工具将是PC和因特网之后最伟大的发明。我国著名嵌入式系统专家沈绪榜院士98年11月在武汉全国第11次微机学术交流会上发表的《计算机的发展与技术》一文中,对未来10年以嵌入式芯片为基础的计算机工业进行了科学的阐述和展望。1999年世界电子产品产值已超过12000亿美元,2000年达到13000亿美元,预计2005年,销售额将达18000亿美元。一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。
       经济型闪存将会成为嵌入式市场的一个方向。

五、我对嵌入式的认识

        我目前就读于西安邮电大学计算机科学与技术专业大二。不像一些目标明确、志向远大的同学。我对自己专业所知甚少,大一仅仅局限于学习好课上知识与学校所授课程。学校有许多创新实验室,大二第一学期参与了实验室项目——循迹小车,认识了许多知识丰富、目标远大、进取向上的同学,在他们的带领下,我对嵌入式有了一些初步的认识。

       在生活中,许多被冠以“智能”产品,都应用到了嵌入式。嵌入式要求人们对硬件软件都要扎实过硬,并且具有创新能力和创造意识,能够出类拔萃、与众不同。嵌入式未来会是我们的生活越来越智能化。虽然嵌入式很难学,门槛众多,但只要有信心和行动,我相信一定会有收获。

六、为什么学习嵌入式?

1.什么是嵌入式?

  • 传统定义(狭义嵌入式):以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
  • 当前定义(泛嵌入式):除PC之外的一切计算机系统。

2.三次信息化浪潮

  • 第一次浪潮        1980年前后        个人计算机                              信息处理  
  • 第二次浪潮        1995年前后        互联网和移动通信网                信息传输
  • 第三次浪潮        2010年前后        物联网、云计算和大数据         信息爆炸

STM32(四)嵌入式浅谈与学习方法_第2张图片

七、什么人适合学嵌入式?

1.嵌入式开发用到哪些知识?

  • 编程语言

  1. 第一层次:C语言

  2. 第二层次:ARM汇编、shell脚本、Python脚本、C++、Java

  • 操作系统

  1. 第一层次:Linux

  2. 第二层次:Android、RTOS(u-cos、Raw-os)

  • 硬件方面

  1. 会看原理图

  2. 懂通信原理及编程(串口、IIC、SPI、USB)

  3. 懂LCD、触摸屏等常见原件工作原理及编程

2.嵌入式开发需要什么技能?

  • 以软件为主,需对硬件有一定了解

  • 涉及面宽,需持续学习

  • 细节较多,需耐心和细致的洞察力

  • 重在调试,需调试和修改程序的能力

  • 企业花钱买的是你解决问题的能力,而不是你脑袋里装的知识("知识"!="能力")

3.总结

  • 软硬结合

  • 嵌入式软件开发并不需要会设计硬件电路和画PCB板

  • 核心:C语言、Linux

  • 面广、周期长、难度大

4.优势

  • 后劲足、需求大、持续价值大、创业潜力大

5.适合人群(学生)

  • 电子、通信、自动化、计算机等相关专业大二至大四

八、嵌入式完全学习路线

STM32(四)嵌入式浅谈与学习方法_第3张图片

STM32(四)嵌入式浅谈与学习方法_第4张图片

STM32(四)嵌入式浅谈与学习方法_第5张图片

STM32(四)嵌入式浅谈与学习方法_第6张图片

  • 嵌入式核心课程

  1. Linux基础+C语言

  2. Linux应用程序开发(系统编程、网络编程)

  3. ARM编程(ARM体系结构、ARM汇编、开发板常见外设裸机编程)

  4. Linux系统移植(uboot移植、kernel移植、rootfs制作)

  5. Linux驱动开发

  • Android扩展

  1. Android HAL驱动(Linux基础)

  2. Android 系统定制(Linux基础)

  3. Android 应用开发

  • 物联网扩展(无限扩展)

  1. GPS和地图查询服务

  2. WiFi

  3. 蓝牙

  4. ZigBee

  5. RFID

  • 项目实训

  1. 网络摄像机

  2. 开源四轴飞行器

  3. 网络远程控制照明系统

  4. 电子书阅读器

  5. 裸机写图片播放器

  6. 开源Android平板电脑

九、嵌入式与物联网、云计算、大数据的关系

  • 物联网的三层架构

STM32(四)嵌入式浅谈与学习方法_第7张图片

  • 嵌入式与物联网

  1. 嵌入式是技术特征,物联网是技术应用

  2. 嵌入式催生物联网的成熟

  3. 嵌入式大发展表明物联网时代的来临

  • 云计算与物联网

  1. 云计算作用于物联网的应用层

  2. 云计算依赖于设备的联网能力

  3. 云计算是嵌入式发展的必然产物

  4. 当前模式是卖产品,云计算是卖服务

  5. 未来 = 瘦客户端 + 云计算

  • 大数据与物联网

  1. 物联网主要功能:产生数据、传输数据、分析数据

  2. 大数据来自物联网感知层

  3. 大数据源于嵌入式,传播于物联网,分析于云计算

  4. 大数据将改变世界

你可能感兴趣的:(STM32)