有关嵌入式、单片机、51单片机、STM32、的一些概念详解

文章目录

    • 一、什么是单片机
    • 二、什么是嵌入式
      • 嵌入式的硬件层
      • 嵌入式的软件层
      • 嵌入式的中间层
    • 三、嵌入式和单片机的区别和联系
      • 一、什么是嵌入式
      • 二、什么是单片机
      • 三、嵌入式和单片机的区别
    • 四、51单片机和STM32单片机
    • 五、有无操作系统的区别,程序启动流程
      • 单片机有无操作系统有什么区别
      • 嵌入式/单片机有哪些操作系统
      • 关于单片机程序运行的一些理解
      • 带操作系统的嵌入式系统的启动过程
    • 六、嵌入式学习路线,单片机学习路线底该怎么学
      • 嵌入式方向
        • 嵌入式硬件方向
        • 嵌入式软件方向
      • 学习嵌入式需要那些内容/li>
        • C语言
        • 基本的硬件原理
        • 数据结构与算法
        • 计算机基础
      • 学习路线推荐
        • 应用开发
        • 驱动开发
        • 大神:各类复杂驱动
      • 总结
    • 七、学习资料及开发板
    • 八、嵌入式单片机开发常用的IDE

在有关嵌入式单片机等相关内容时,我们会碰到很多名词概念,这些名词概念的定义比较模糊,不同的名词概念之间又有交叉和不同,因此本文对嵌入式单片机领域的一些相关概念做一个比较全面的总结和归纳。如果觉得这篇文章有帮助到你,请点个赞吧!

一、什么是单片机

首先明确概念,什么是单片机,单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,广泛应用在工业控制领域。

从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。比如最经典的51系列单片机,外观只是一块一个拇指大小的长方体芯片,共40个引脚,里面包含了逻辑运算单元。实际上也就是一个CPU。

在最开始接触单片机的时候,还曾经有过一个疑问,为什么单片机是黑色的而不可以是别的颜色,后来才知道是单片机材料的限制。

对单片机而言,其实一个芯片就是全部,其他的比如单片机最小系统都是为了单片机的正常运作而加入,比如晶振,5v电源,电感电阻等。当然最小系统只能保证单片机正常运行,几乎实现不了基于单片机的任何应用。

为了使单片机实现应用,必须要加入其他外设。比如按键,led灯,led屏,蜂鸣器,各种sensor。这也就是市面上很多公司都在做的单片机开发板。

总结,单片机就是完成运算、逻辑控制、通信等功能的单一模块。也就是单片机真的姓“单”。DSP芯片也可以认为是一个单片机。当然它们性能很强大,但是功能依然很单一,总之就是处理数据、逻辑。

总结

单片机可以看成是一个小型的计算机,和我们平时用的电脑,手机有点类似,只不过单片机的性能以及用途和电脑手机会有很大的不同。

二、什么是嵌入式

那么什么是嵌入式呢,一般说嵌入式都是指嵌入式系统,IEEE(InsTItuteof Electrical and ElectronicsEngineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。

嵌入式系统是将应用程序、操作系统、和计算机硬件连接在一起的系统,是指以应用为中心,以计算机技术为基础,软硬件可裁剪,其针对的用户应用对功能、可靠性、成本、体积、功耗和使用环境有特殊要求的专用计算机系统。

事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。这是因为嵌入式系统一般用于工业控制,也就是说对外设的控制都是写死的,并不需要人工干预,同时也为了保证系统的稳定和可靠。

我们经常可以听到公司招聘的要求是嵌入式软件工程师或者嵌入式硬件工程师,也就是说嵌入式系统包括软件和硬件,其实仔细想想也能明白,都已经跑系统了,当然有软件也有bsp硬件。

也就是说嵌入式系统是软硬件结合体,国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

可以看到嵌入式一般是一般包括软硬件的。

嵌入式的硬件层

硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。

其中核心就是微处理器,嵌入式处理器和一般的电脑CPU还有区别,嵌入式微处理器大多工作在特定设计的系统中,比如TI或者Atmel公司都有很多定位不同的处理器,atmel的SAM系列是专门为物联网设计的,AVR则由于性能突出,广泛应用于工业领域。

嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。据不完全统计,全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系有ARM、MIPS、PowerPC、X86和SH等。

但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。

在嵌入式领域,可以说ARM架构的处理器占据了半壁江山,而ARM公司也成为著名的科技公司,而它却没有生产任何处理器,而只是提供了IP,可以看出一流公司做标准。而其他用的比较多的架构就是MIPS,sparc、powerpc等。

比如ARM公司有各种各样的处理器架构,最经典的cortex系列,它属于ARMv7架构,这是到2010年为止ARM公司最新的指令集架构。ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。

嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。

嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、I2C(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。这一点其实和单片机类似。

嵌入式的软件层

也就是操作系统了,包括内核和文件系统,还有就是更为顶层的应用程序,嵌入式操作系统一般都是Linux或者其他类Unix,还有一些实时操作系统(RTOS)比如VxWorks、RTEMS、ucOS等。

其中Linux还包括不同的distribuTIon,比如Ubuntu、Redhat、Debian、centos等,他们都是采用Linux的内核,不同的是上面的software和tools,当然不用太过于担心标准问题,这些Linux发行版选择的软件几乎都是比较通用的,比如网页服务器的Apache、电子邮件服务器的postfix、sendmail、文件服务器的Samba等。此外还有Linuxstandard base等标准来规范开发者。类Unix主要是FreeBSD以及Solaris等。

嵌入式领域最常用的之一是实时操作系统,实时操作系统的核心就是实时性,本质就是任务处理所花费的时间的可预测性,即任务需要在规定时限内完成。IEEE对实时系统的定义是“那些正确性不仅取决于计算的逻辑结果也取决于产生结果所花费时间的系统”。

实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的; 软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。

实时操作系统和Linux这种分时操作系统的区别列举如下:

(1)多路性。实时信息处理系统与分时系统一样具有多路性。系统按分时原则为多个终端用户服务; 而对实时控制系统,其多路性则主要表现在经常对多路的现场信息进行采集以及对多个对象或多个执行机构进行控制。

(2)独立性。实时信息处理系统与分时系统一样具有独立性。每个终端用户在向分时系统提出服务请求时,是彼此独立的操作,互不干扰;而在实时控制系统中信息的采集和对对象的控制,也彼此互不干扰。

(3)及时性。实时信息系统对实时性的要求与分时系统类似,都是以人所能接受的等待时间来确定;而实时控制系统的及时性,则是以控制对象所要求的开始截止时间或完成截止时间来确定的,一般为秒级、百毫秒级直至毫秒级,甚至有的要低于100微秒。

(4)交互性。实时信息处理系统具有交互性,但这里人与系统的交互,仅限于访问系统中某些特定的专用服务程序。它不像分时系统那样能向终端用户提供数据处理服务、资源共享等服务。

(5)可靠性。分时系统要求系统可靠,相比之下,实时系统则要求系统高度可靠。因为任何差错都可能带来巨大的经济损失甚至无法预料的灾难性后果。因此,在实时系统中,采取了多级容错措施来保证系统的安全及数据的安全。

由于更加可靠和及时。嵌入式实时操作系统更加广泛应用于工业控制、航空航天、军工等领域,比如美国航天局NASA近几年发射的火星探测器等都是采用的RTEMS实时操作系统。

嵌入式的中间层

所谓的中间层就是软件层和硬件层之间的接口层,其实严格而言也属于软件层。一般开发者称之为BSP,这一层主要负责的是向下提供硬件的驱动,硬件的配置等操作,向上则向软件开发者提供标准API,进行中间层开发的开发者通常称为嵌入式驱动工程师。

从这里也可以看出来,嵌入式设计和软硬都分不开,既要掌握底层硬件的特性以及如何驱动其工作,也要了解操作系统的相关知识,才可以编写相应功能的应用。

因此看一个操作系统是否支持某个芯片或者某个开发板,只要看其源码中是否包含相应芯片或开发板的板级支持包。

三、嵌入式和单片机的区别和联系

凡是从事计算机或电子信息相关领域工作的童鞋,一定都听说过嵌入式和单片机吧/p>

很多人应该知道,这两个名词和硬件系统有着非常密切的关系。一听到它们,就容易让人联想到插满芯片和针脚的电路板:

img

这个芯片它有一些特性,比如说可编程,也就是可以写程序下载到芯片里面去,有点类似电脑cpu的感觉。

大家也可以理解成是拼多多版的CPU,这里指的是性能,稳定性还是妥妥的。

单片机一般是用来做带智能控制的电子产品的,不同的电子产品由不同的程序搭配不同的电路完成。

所以,单片机的应用可以说是铺天盖地,随处可见。

再加上最近几年,在物联网的赋能之下,单片机应用场景更加丰富智能,比如智能家居、车联网、共享单车、共享充电宝、充电桩等等。

我从事了这个行业10年,这两年感觉这个行业趋势也越来越猛,最直接的体现就是工资涨幅。

还有就是最近有几个企业也找到我们无际单片机编程,问有没有学员介绍到他们公司做开发。

在未来,随着5G和物联网技术不断成熟,我相信发展会更好。

2.51单片机和stm32有什么区别/strong>

51单片机和stm32就是单车和摩托车的区别,同样都是单片机,STM32的性能比51单片机强悍很多。

比如说内存大小、频率、封装引脚等等都不同。

我们不妨来看一下两者芯片内部的资源。

51单片机内部资源:

img

可能你看起来有点烧脑,也看不懂,没关系,都是正常的现象。

等你学会了以后,再去理解就简单了,这里就不做过多的介绍了。

3.入门选哪个单片机最好/strong>

新手入门的话我建议是先学习51单片机,比较简单,比较适合系统去学习。

单片机是需要c语言编程,这块可以去看无际单片机编程的那个单片机c语言编程,这样就不用自己去规划学习内容和顺序,直接每节课按顺序学就行了。

在以前很多单片机都是用汇编来编写程序的,但是由于汇编写的代码很难维护,也很难移植,所以现在主流还是用C语言。

我们只需要学习一门语言就够了,不需要把汇编和C语言全学。

单片机开发是一门偏向实战的技术,我们在学习的过程中必须要配套开发板去学习。

img

嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统

国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统作为装置或设备的一部分,它是一个控制程序存储在ROM中的嵌入式处理器控制板

事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

嵌入式方向

嵌入式工程师需要掌握的内容非常广泛,主要包括嵌入式软件、嵌入式硬件、以及相关行业、产品的专业知识。作为嵌入式初学者,我们不可能,也没有那么多精力把所有的知识到搞的很精通,我们要学会抓住重点,学会取舍,达到一通百通,事半功倍的学习效果
首先嵌入式技术主要分为嵌入式软件和嵌入式硬件两大方向。

嵌入式硬件方向

嵌入式硬件工程师主要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力

因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在

要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验

嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析

嵌入式软件方向

嵌入式软件工程师的职责主要是根据产品的功能需求设计好软件,让硬件工作起来

嵌入式电子产品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4 ~ 5倍

所以一般情况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需求比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来相对容易些,所以这里我重点和大家谈一下嵌入式软件工程的学习路线。

学习嵌入式需要那些内容/h3>

C语言

C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包括安卓系统的底层也是C语言实现的,基础不牢,地动山摇,一定要打好基础。

C语言学习过程中重点要放在指针,结构体,文件的处理,数组等。在学习过程中,一定要多写代码代码光看是看不会的

遇到错误不要怕麻烦,善于使用搜索工具,百度,google,stack overflow。要知道,你遇到的问题别人肯定也会遇到过,一般在网上一搜就会有答案。

最后,要多调试程序,熟悉调试的过程。程序三分写,七分调,没有谁的程序是可以一遍写对的。而且,多调试程序也可以让我们理解程序具体是如何执行的。

基本的硬件原理

嵌入式肯定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点。但是很多企业在面试的时候,也会问一些基本的硬件知识。

来源:小熊coder

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月11日
下一篇 2022年1月11日

相关推荐