嵌入式入门基础知识-程序员宅基地

技术标签: arm开发  智能家居项目  嵌入式  


前言

今天是参加百问网组织的物联网智能家居项目第一天,很幸运能够抓住这次机会来更好的学习嵌入式,也非常感谢百问网的老师们辛勤教导。


嵌入式基本知识

ARM的理解

ARM是一家公司

ARM首先是一个公司,是一家全球半导体行业技术领先的公司,主要业务是设计RISC嵌入式处理器;
RISC:精简指令集,指的是一种指令类型比较少的计算机指令,因为其执行速度快而 被广泛应用,缺点就是指令类型少,实现的功能相对单一。
CISC:复杂指令集,指的是一种指令类型比较丰富的计算机指令,因为其指令丰富,运算效率高而被广泛使用,缺点就是指令执行速度相对较慢(它是通过微程序触发实现)。

ARM公司的发展历程
在这里插入图片描述

一类芯片或产品的统称

因为很多的公司,再拿到ARM公司的授权以后生产了很多的芯片或产品,像我们使用的STM32F103这一系列就是Cortex-M3系列,就是使用的ARM的M系列的核等等
在这里插入图片描述

一项技术的名称,即采用RISC处理器体系架构

现在几乎大家都把RISC处理器架构称为ARM架构了,所以ARM也指一种体系架构,即RISC处理器体系架构。

ARM和intel的区分

其实就是RISC和CISC的区分,两家公司代表计算机指令集的两个极端。区别也在于两种指令集的区别。
ARM因其精简指令集,指令执行速度快,所以广泛应用于嵌入式领域,实现一些功能相对单一的产品。
intel因其CISC指令类型丰富,执行效率高,所以广泛应用于PC,高级智能机等领域。

针对应用场景的不同,所有使用的指令集架构自然也就不同。

ARM和STM32的关系

ARM和STM32的关系就是,STM32的体系结构就是ARM架构。
STM32是由ST公司研发的产品,而这个产品的产生是ST公司在购买到了ARM公司的授权以后,经过ST公司自己的添加外设,设置结构等方式而生产的产品。但是这个产品的核心,内核的结构是由ARM公司设计的。里面的IP核的设计就是ARM公司授权给ST公司,ST公司根据这个IP核的设计结构进行添加,设计进而生产,就有了我们日常使用的一系列STM32产品。

处理器的基本概念

MCU

微 控 制 器 (Micro-Controller Unit , MCU) , 俗 称 单 片 机 。 之 所 以 称 之 为 单 片 机 (Single ChipMicrocomputer), 是因为不同于其它处理器,它将CPU、 RAM(随机存储器)、 ROM(只读存储器)、 I/O、中断系统、定时器等各种功能外设资源集中到一个芯片上。 这个芯片就是一个完整的微型计算机,只需要供电或加上极少的外围电路即可工作。
常见的MCU有80C51系列单片机、 Atmel公司的AVR系列单片机、 Microchip公司的PIC系列单片机、 TI公司的MSP430系列单片机、 ST公司的STM32系列单片机、 NXP公司的LPC1700系列单片机。早期的MCU主要是8位,后面发展出16位,再到现在主流的已经是32位。此外,主频不断提高、 ROM不断增大、外设不断增多,单片机的应用领域和场合越来越大

MPU

微处理器(Micro-Processor Unit, MPU)。类似通用计算机的CPU,主要负责处理计算,需要外加RAM、Flash、电源等电路。
MCU和MPU的本质区别是因为应用场景的定位不同。 MPU注重通过相对强大的运算/处理能力,执行复杂多样的大型程序,因此常需要外挂运行内存(RAM)、存储器(Flash)等。 MCU注重功能较为单一、价格敏感的应用场景,不需要相对强大的运算/处理能力,更多的是对设备管理/控制,因此不需要大容量的RAM、 Flash来运行大型程序,于是将RAM、 Flash全集成在一起,大家也就俗称“单片机”

在这里插入图片描述如今,随着技术的发展,市场及需求的变化, MPU和MCU的界限日趋模糊。高端的32位MCU主频越来越高,已经反超低端MPU主频, MCU也有外挂RAM和Flash的场景,依靠硬件结构去区分逐渐困难。读者可以简单的认为,嵌入式微处理器MPU,通常运行Linux、 Android等非实时操作系统,应用在高端应用市场,比如智能手机、 路由器等消费电子市场领域,而嵌入式微控制器MCU,常用运行裸机或实时性操作系统,应用在中、低端应用市场,比如家电控制领域、工业控制领域等。

总的来说MCU:主要应用于微控制领域,运行逻辑程序或实时性操作系统的场合。
而MPU:主要就是针对跑Linux,Android操作系统等程序复杂,需要操作系统进行资源管理的应用。

DSP

DSP通常有两个含义。

  • 数字信号处理(Digital Signal Processing, DSP),是一门学科技术,使用数值计算的方式对信号进行加工处理的理论和技术。
  • 数字信号处理器(Digital Signal Processor, DSP),是一种专门用于数字信号处理领域的微处理器。
    在这里插入图片描述DSP芯片为了达到快速处理数字信号处理的目的,采用了许多特殊软硬件结构。首先是采用哈佛结构,(哈佛结构就是将程序指令和存储数据存在不同的存储器上)将程序和数据分开,同时为处理器提供指令和数据。然后采用多级流水线技术,在指令周期内可以执行更多指令。加上专用的硬件乘法器、特殊的DSP指令, 使得DSP芯片在计算处理上,远超同主频的MCU或MPU。
    DSP芯片拥有强大的数据处理能力,在数字信号处理领域,如调制/解调、数据加密/解密、图形处理、数字滤波、音频处理等计算密集型的场景广泛应用。

FPGA

现场可编程门阵列( Field- Programmable Gate Array, FPGA), 由可编程互连连接的可配置逻辑块(CLB) 矩阵构成的半导体器件。 通俗地说, FPGA就是一个可以通过编程改变内部硬件结构,实现所需功能的芯片。 前面的MCU、 DSP等都是硬件资源固定,只能通过修改软件实现所需功能。而FPGA是通过硬件描述语言或其它方式修改硬件,将FPGA变为CPU或专用芯片,来实现控制或算法。因此, MCU、 DSP能够实现的功能, FPGA理论上都可以实现,反之则不一定。
如图为Xilinx公司的FPGA芯片XC3S400A。
在这里插入图片描述
FPGA主要有两大优势: 高速和灵活。 FPGA使用硬件处理数据,采用并发和流水技术,多个模块之间可以同时并行执行。 FPGA可以根据现场情况配置器件功能,能够在技术和需求变化时重新配置,实现系统优化升级。**在某些通信领域,需要处理高速的通信协议,同时通信协议随时都可能修改,不适合做成专门的芯片,FPGA的高速、灵活就便成了首选。**虽然FPGA功能强大,但实际工程项目中,还需考虑硬件成本、开发难度和市场需求等因素。 一些简单的控制场合, 尽管FPGA和MCU都能胜任,但MCU价格低廉和研发简单,更划算。

总结

如今复杂的嵌入式系统往往是复合架构, 比如“ MPU+FPGA”、“ MPU+DSP”、“ MCU+FPGA”、“ MCU+DSP”,甚至“ MCU +MPU+FPGA+DSP”。 控制、显示、通信一般选择MCU或MPU, 通信和数据处理算法选择DSP,大量的数据处理和特定实现选择FPGA。
MCU开发需要C语言基础,然后学习各类资源、接口,再到RTOS; MPU通常运行Linux,需要Linux基础、操作系统、网络编程等知识; DSP开发需要具备数据信号处理算法的理论知识; FPGA开发需要了解高速接口或音/视处理算法等。
一般来说, MCU相对比较简单,适合作为入门学习,待MCU学习完后,再结合实际情况选择深入学习方向。

ARM开发

MCU开发和MPU开发的区别

MCU开发就是指的单片机开发,着重是对寄存器操作,传感器工作原理,通信协议,外设接口资源等的熟悉和掌握。
MPU开发就是带有操作系统的开发。包括系统的移植,驱动的编写,网络编程,页面设计(Qt)等。
在这里插入图片描述

开源硬件 Arduino 和 Raspberry Pi

在开源硬件领域, Arduino和Raspberry Pi(树莓派)都是电子创意设计常用的开发平台和工具。它们使用简单的开发方式,使初学者能快速搭建其创意原型,有效降低了学习难度,缩短了开发周期。
在这里插入图片描述
Arduino是一款基于微控制器( MCU)的开发板,它可以运行一些相对比较简单的应用程序,成本低廉,适合用于与传感器、外围电路进行控制和通信。

Raspberry Pi是一款基于微处理器( MPU)的开发板,可以看作是一台小型计算机,板载RAM、 HDMI接口、 USB接口、音频接口、网络接口等。通常运行发行版Linux操作系统,可以运行功能更丰富的应用程序,适合用于一些需要较多运算和功能的项目,比如游戏虚拟机、网页服务器、机器人、家庭智能控制系统
等。

总结

MCU和MPU的开发主要是侧重点不同,而这个侧重点就是指的运行于不同的场景和需求。(需求是否复杂,是否需要操作系统进行资源的管理和调度)。

开源硬件面向的群体主要还是电子爱好者,帮助他们无需深入了解相关知识的情况下,快速验证自己的创意想法。对于嵌入式开发人员, Arduino过于简单, Raspberry Pi底层不开源,都不适合深入研究,开发人员应选一款采用常见主控芯片设计的开发板进行学习、研究。

总结

对于想深入了解的同学,推荐到百问网官网找老师进行咨询。相信你一定能学到你想学的东西!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56145255/article/details/122894254

智能推荐

软件模拟IIC从机_模拟i2c从机-程序员宅基地

文章浏览阅读8.5k次,点赞9次,收藏93次。由于ic性能有限,没有硬件的iic外设,项目上有需要使用iic从机,所以自己写了个iic从机模块,执行效率还行可以10m主频的单片机最快可以接收到100K的速度。该模块需要资源,2个外部中断配置-上升下降沿中断,来模拟iic时序,芯片编译器的问题,对结构体不是很友好,所以这边没有使用结构体对变量打包,目前只实现了简单的接受和发送,不支持eeprom那种读写方式。两组io口配置,总共有4种状态:1 SDA下降沿中断SCL高电平 – 起始信号SCL低电平 – 数据0 或 ACK2 SDA上升沿中断_模拟i2c从机

Swish & hard-Swish_swish和hardswish-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏18次。当β = 0时,Swish变为线性函数f(x)=x/2β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x)所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的特性。其在模型效果上优于ReLU。ha..._swish和hardswish

交叉编译 Qt5.12.2_qt5.12 arm 交叉编译-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏59次。来自QQ群 Linux && 技术分享 311078264打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。参考文章:https://doc.qt.io/qt-5/linux.html交叉编译工作在Ubuntu18.04上进行,..._qt5.12 arm 交叉编译

/deep/ 深度作用选择器作用及使用_/deep/ span-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏6次。之前在开发中遇到一个问题,vue项目结合 element ui 使用。但是 element ui 的样式不一定符合我们的需求,这时我们就需要改变它的样式。比如博主使用到了element ui 的对话框,我想要改变这个对话框标题的颜色,所以我需要在页面中审查元素找到对应的标签。但是当我找到并且复制,然后试图去改变它的样式时,怎么都没办法改变。我以为是权重的问题,所以我加 ! important,但是也毫无作用。当我审查元素发现此样式就没有作用到,就相当于它没有找到这个元素,所以也就不存在改_/deep/ span

MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]_lambdaquery() 无法缓存实体类-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏3次。项目有用到mybatis-plus还是挺香的,但是遇到一个坑com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [dbName] of entity []意思是实体类enetity及其字段没有缓存或者说指定字段没有缓存这个需要具体问题具体分析,得先找到在哪缓存的?什么时候缓存的?问题和解决方案我这里的问题是因为继承太多正常是一个mapp_lambdaquery() 无法缓存实体类

FP-growth_fp-growth工作流程-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏6次。FP-growthFP-growth 算法能够更有效地挖掘数据,但不能用于发现关联规则。FP-growth 基于 Apriori 算法构建,但在完成相同任务时采用了一些不同的技术。Apriori:在每次循环的连接步中都要扫描数据集,来计算当前组合而成的项集的支持度。FP-growth:只需要对数据库进行两次扫描,并将数据集存储在一个特定的称作 FP 树的数据结构。这种做法能够使得算法的执..._fp-growth工作流程

随便推点

CSS选择器小结(python使用css方式定位)_python可以用css来调节位置吗-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏29次。学习Python写爬虫的时候,遇到css定位问题,故小结一下css选择器定位的方式通配符选择器:* {color:red;}CSS 类选择器匹配所有class = ‘important’*.important {color:red;}去掉前面通配符也是一样的。结合元素选择器匹配所有p标签下class = ‘important’p.important {color:red;}CSS 多类选择器匹配c..._python可以用css来调节位置吗

C#多维数组的维数长度求解_多维数组长度 c#-程序员宅基地

文章浏览阅读2.4k次。C#多维数组的维数长度求解string[,] datalst = new string[,] { { “11”, “12”, “13” }, { “21”, “22”, “23” } };int row = datalst.GetLength(1); //第一维的长度(即行数)int col = datalst.GetLength(0); //第二维的长度(即列数)Console.Wri..._多维数组长度 c#

C# System.Threading.Timer如何停止_system.timers.timer如何停止-程序员宅基地

文章浏览阅读6.7k次。Threading.Timer 属于100% 多线程Timers.Timer 默认多线程,可设置为单线程既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 n..._system.timers.timer如何停止

爬取汽车之家所有汽车参数配置_汽车之家参数配置怎么导出-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏18次。效果预览汽车之家参数配置的页面无法右键查看网页源代码,不太好爬取,网上相关教程方法比较复杂,这里采用了两步走的爬取方法。即先获取所有车型的网页,再分别解析,逐步拆解。代码实现第一步,导入相关库import bs4import requests as reqimport reimport jsonimport csv第二步,下载出所有车型的网页def mainMethod(): li = [chr(i) for i in range(ord("A"), ord("Z") _汽车之家参数配置怎么导出

​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)_培训机构 排课系统 源码-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏20次。后端采用SSM框架。前端使用的是Layui的一个网站模板。通过3种角色使用,实现了包括了教师、学生、班级、专业、课程、排课、数据统计等多个不同的模块。本系统的排课逻辑是为不同学院下不同班级的每一天课程进行安排,并不是传统的固定课程形式。每一天的课程可以是不同的。_培训机构 排课系统 源码

vue-amap中使用官方轨迹回放功能_vue-amap passedpolyline-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏7次。// vue-amap中使用官方轨迹回放功能<template> <div class="page"> <div>MAP TRACK</div> <div class="map-container"> <el-amap :center="center" :amap-manager="amapManager" _vue-amap passedpolyline

推荐文章

热门文章

相关标签