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)。发展到现在,广泛使用的有三种操作系统即多道批处理操作系统、分时操作系统以及实时操作系统。
常见的嵌入式操作系统:μ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年前后 物联网、云计算和大数据 信息爆炸
七、什么人适合学嵌入式?
1.嵌入式开发用到哪些知识?
编程语言
第一层次:C语言
第二层次:ARM汇编、shell脚本、Python脚本、C++、Java
操作系统
第一层次:Linux
第二层次:Android、RTOS(u-cos、Raw-os)
硬件方面
会看原理图
懂通信原理及编程(串口、IIC、SPI、USB)
懂LCD、触摸屏等常见原件工作原理及编程
2.嵌入式开发需要什么技能?
以软件为主,需对硬件有一定了解
涉及面宽,需持续学习
细节较多,需耐心和细致的洞察力
重在调试,需调试和修改程序的能力
企业花钱买的是你解决问题的能力,而不是你脑袋里装的知识("知识"!="能力")
3.总结
软硬结合
嵌入式软件开发并不需要会设计硬件电路和画PCB板
核心:C语言、Linux
面广、周期长、难度大
4.优势
后劲足、需求大、持续价值大、创业潜力大
5.适合人群(学生)
电子、通信、自动化、计算机等相关专业大二至大四
八、嵌入式完全学习路线
嵌入式核心课程
Linux基础+C语言
Linux应用程序开发(系统编程、网络编程)
ARM编程(ARM体系结构、ARM汇编、开发板常见外设裸机编程)
Linux系统移植(uboot移植、kernel移植、rootfs制作)
Linux驱动开发
Android扩展
Android HAL驱动(Linux基础)
Android 系统定制(Linux基础)
Android 应用开发
物联网扩展(无限扩展)
GPS和地图查询服务
WiFi
蓝牙
ZigBee
RFID
项目实训
网络摄像机
开源四轴飞行器
网络远程控制照明系统
电子书阅读器
裸机写图片播放器
开源Android平板电脑
九、嵌入式与物联网、云计算、大数据的关系
物联网的三层架构
嵌入式与物联网
嵌入式是技术特征,物联网是技术应用
嵌入式催生物联网的成熟
嵌入式大发展表明物联网时代的来临
云计算与物联网
云计算作用于物联网的应用层
云计算依赖于设备的联网能力
云计算是嵌入式发展的必然产物
当前模式是卖产品,云计算是卖服务
未来 = 瘦客户端 + 云计算
大数据与物联网
物联网主要功能:产生数据、传输数据、分析数据
大数据来自物联网感知层
大数据源于嵌入式,传播于物联网,分析于云计算
大数据将改变世界
STM32(四)嵌入式浅谈与学习方法相关推荐
- 浅谈自考学习方法(二)
自考的<管理经济学>从发给我们到晚上上课就一天的时间,米老师一位年近五十的老人仅用了两个的小时就读完了,并且没有任何的遗漏,课堂讲的依然妙趣横生,欢声笑语,短短两个小时的时间不禁让人惊叹, ...
- stm32中断优先级_浅谈STM32串口USART1的使用
浅谈STM32串口USART1的使用 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范 ...
- 冰冻三尺非一日之寒-自学篇 浅谈个人学习方法
昨晚还在看比赛(war3),小源跑过来问我明天1024,不写篇文章么,想想也是,1024这也算个热点,赶紧来蹭蹭,哈,开个玩笑. 上次谈了谈自己写博客的经历,那么这次就从自身出发来想想该如何学习,首先 ...
- 浅谈SEO学习方法和心态
快速学习SEO我想是每一个SEO的初学者梦寐以求的,我也经常和我的一些同行.同事.还有学生们讨论到能不能制作一个快速学习SEO的教程.9年SEO经验,从独立操作云南旅游的关键词谷歌排名到后来的主做各种 ...
- synchronized()_JMM(四):浅谈synchronized锁
对于synchronized锁机制而言,准确来说其应该属于JVM的范畴.这里基于行文的连贯性.完整性考虑,故将该部分内容在JMM系列中一并进行介绍 信号量.管程 Semaphore 信号量 Semap ...
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 浅谈ASP.NET的内部机制(一)
浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...
- 浅谈ASP.NET内部机制(五)
浅谈ASP.NET内部机制(五) 前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 系 ...
- 浅谈MaxCompute资源规划管理及评估
简介: 本文主要介绍如何进行MaxCompute存储资源和计算资源的评估及规划管理. 一.MaxCompute资源规划背景介绍 MaxCompute资源主要有两类:存储资源.计算资源(包含cpu和内存 ...
最新文章
- IBatis存取图片在Oracle Blob大字段中Asp.Net
- 中国发电机行业应用前景与投资策略分析报告2022版
- Ubuntu下搭建Kubernetes集群(3)--k8s部署
- 怎么查看MySQL 源码编译了什么_Mysql 源码编译教程贴
- 机器学习统计学相关书籍
- 如何应对糟糕的面试官(2)
- POJ 1664 放苹果(递归或DP)
- MySQL MHA详解(二)——实战配置
- ARMv8-A vs ARMv7 Registers
- 软件从“出生”到“消亡”的过程称为_软件测试面试最常问到的101个面试问题,你中枪了吗?(一)...
- 华为加油!海思加油!翻过这座山,你就是传奇
- cad图形如何导入到奥维地图_CAD图导入奥维简易操作步骤--陈浩
- SAS计算IV代码分享
- 任意长度的python列表元组_【任】 任怎么读|组词|读音|拼音|多音字|意思 - 辞海之家...
- java socket 卡住_Java socket通讯实现过程及问题解决
- WIN7中文专业版安装日文语言包的方法
- webstorm 插件拓展(一)
- 基于KF32A156 - MCU Bug list
- /bin/sh: 1: x86_64-linux-gnu-gcc: not found
- appium 等待的3中方式:强制等待、隐式等待、显示等待