也许大家都注意到了,在过去的20多年的时间里,微控制器(MCU)经历了跨越式的发展,这反映在很多方面,比如更高的系统始终、更多的外设模块、更加便利的调试手段、32位的内核等等。但MCU内部的数据内存空间则始终在十几K(16~32KB)的左右徘徊,虽然有些基于Cortex M4核单片机有多达265kB RAM的型号,但是在众多单片机型号阵列中,它们是寥寥无几。

那么,究竟什么原因使得单片机很容易拥有多达数 MB的程序Flash空间,而数据内存只有那么小呢?

△ 小型封装的MCU

在一篇博文“Why do microcontrollers have so little RAM?”中,众人给出了单片机RAM容量小的很多原因。

在所有影响单片机内RAM增加的原因中,一个基础的问题就是RAM会占用很多硅片面积,这也会直接引起芯片价格的增加。这是因为在同样的硅片上,占用硅片面积大会使得MCU数量就会减少,特别是在晶圆片的边界部分造成更大的浪费。祸不单行,面积大的IC也更会产生缺陷,使得成品率下降。

第二个原因就是制作RAM的工序复杂。可以通过不同手段优化RAM生产工艺,但在制作MCU过程中, 同一芯片不可能经历过多的工序。有一些芯片加工服务厂商专门生产DRAM,这是利用特殊的半导体电容技术来极大减少RAM所占用的硅片面积。但DRAM需要通过不停刷新来维持其内部数据。为了延迟DRAM单元保持数据的能力,就要求晶体管漏电流小,这也会造成晶体管的运行速度降低。这需要在速度和数量之间做折中,但这种折中工艺不利于制作高速逻辑电路。

△ IC和晶片

此外,大容量RAM电路在后期的测试阶段也会消耗大量的时间,从而增加生产的时间成本。所以,经济原因造成生产RAM的专门厂商兴起。

功耗是另外一个限制因素。单片机系统通常对功耗有限制,很多情况下,单片机通过进入睡眠状态来减少耗电量。普通的SRAM耗电量很小,通过备用电池往往可以工作很多年。但DRAM则需要通过不断刷新来维持存储的数据。一旦停止刷新,由于漏电流的存在,DRAM的内容在不到一秒钟的时间内就会消失。所以,单片机中不能够使用DRAM而只能使用占用硅片面积更大的SRAM。

在现代CPU技术中,往往在新品中保留数量较少的SRAM作为缓存(Cache),而将大容量的DRAM作为CPU外部的数据存储空间。

有一些非常酷的手段可以将不同生产工艺的RAM和MCU制作工艺融合在一起,例如多芯片封装技术(Multi-Chip Package),将RAM新品放在MCU芯片上面堆叠一起进行封装,这比在电路板上将RAM与MCU集成更加节省系统体积,也提高数据传输速率。

△ AMD的带有堆叠封装的MCU

最后一个原因,那就是在绝大多数单片机应用的场合所需要的RAM的容量都比较少。比如在嵌入式控制领域,很多很多传感器信息都可以用极少字节的数据来表示,用于控制的参数和控制逻辑占用数据空间也很少。

所以当需要大量RAM的应用出现的时候,往往就会直接采用集成有大容量DRAM的电路板来工作。通过外部集成大容量RAM芯片要远比MCU内部集成的RAM更加经济。

△ 高容量的DRAM

除了前面的原因之外,单片机指令集也会限制RAM访问空间。比如Microchip公司的单片机,PIC10LF320,是12bit的指令,它只能够范围128字节的RAM空间。对于8031单片机,直接寻址的RAM空间也只有128字节。如果访问更大的外部存储空间,则需要借助于执行效率更低的间接指令。

单片机总线结构分为Harvard结构和Von Neumann结构,后者中,程序和数据存储空间是在同一个访问空间中。如果单片机中集成了大量的Flash区,那么留给数据RAM空间访问地址就少了。

此外,高效的C语言编译器,可以有效重复应用有限的RAM空间完成所需要的任务。在复杂的应用中,往往会采用多个单片机协同完成,这大大提高系统实时特性。巧妙的设计方案会避免嵌入式系统对大容量RAM的需求。所以,有人认为,正是由于没有大量需要高RAM容量的应用要求,是造成现在单片机内部RAM少的真正原因。

别忘了,早期那些另我们着迷的电子游戏,虽然有着炫酷的图形界面,但它们连程序带数据总共也只有8k字节的存储空间。让我们想早期的这些嵌入式编程人员致敬吧。

△ 吃豆子游戏

△ 太空入侵电子游戏

为什么单片机通常只有那么小的数据内存?相关推荐

  1. PIC单片机(PIC16F873)小项目五(电路工作原理)

    怎么上传图片呀? 1.系统简介 本系统为xxx检测仪,用于检测xxx载重量,并以模拟输出量形式把载重量传递给主控制系统. 检测仪根据电梯轿底橡胶块随载重做弹性变化的原理,通过霍尔传感器检测其位移变化且 ...

  2. Charles抓取微信小程序数据 以及 其它应用网站数据

    为了抓取小程序数据所以使用Charles来抓取,下面介绍下使用方法(mac环境下使用).使用Charles可以非常方便的抓取Http/Https请求.官方dmg下载地址:点击此处下载 Charles抓 ...

  3. 【深度学习】弱/半监督学习解决医学数据集规模小、数据标注难问题

    [深度学习]弱/半监督学习解决医学数据集规模小.数据标注难问题 文章目录 1 概述 2 半监督学习 3 重新思考空洞卷积: 为弱监督和半监督语义分割设计的简捷方法 4 弱监督和半监督分割的训练和学习 ...

  4. 小程序数据框有重影_小程序开发(二):数据绑定

    前言: 第一章讲到了如何去创建一个项目,并且在模拟器上显示出来hello world,但是程序开发中,很多的数据都是从服务器去获取或者显示的数据会根据用户的操作来变化的,所以我们需要用到数据绑定. 数 ...

  5. 微信小程序数据统计和错误统计的实现

    某些情况下我们需要对小程序某些用户的行为进行数据进行统计,比如统计某个页面的UV, PV等,统计某个功能的使用情况等.好让产品对于产品的整个功能有所了解. 在网页里,我们很多人都用过谷歌统计,小程序里 ...

  6. Python 【爬虫3】_微信小程序_小游戏数据助手数据爬取

    一.背景介绍 近期产生需求,需要批量重复获取微信小程序数据助手的部分数据,减少重复工作,提高效率. 二.环境准备 主要逻辑:charles抓包,分析,爬取,数据存储 环境配置:pc-win10/移动- ...

  7. 微信小程序,小游戏数据助手数据爬取!还敢随便授权小游戏吗?

    一.背景介绍 近期产生需求,需要批量重复获取微信小程序数据助手的部分数据,减少重复工作,提高效率. 二.环境准备 主要逻辑:charles抓包,分析,爬取,数据存储 环境配置:pc-win10/移动- ...

  8. 使用java完成一个猜数字的小游戏(数据范围在1-100之间)

    最近开始学java,使用java做一个猜数字的小游戏,代码不多,我就直接贴代码了 /** A:案例演示* 需求:猜数字小游戏(数据在1-100之间)*/import java.util.Scanner ...

  9. 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy

    ** 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy ** 一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 v ...

最新文章

  1. iOS 发布APP关于IDFA的相关内容
  2. python趣味编程10例-Python趣味编程与精彩实例,码高少儿编程 编
  3. 最小代价生成树Prim/Kruskal(c/c++)
  4. 可爱的特殊字符集收集
  5. 区块链BaaS云服务(17)纸贵科技Z-BaaS“数据治理”
  6. java访问控制度_菜鸡的Java笔记 - java 访问控制权限
  7. wxpython 安装教程
  8. 从Windows上用SSH链接接入Ubuntu
  9. 005 - react
  10. 那桃林深处最美的风景
  11. 李新海:沉默是口才运用的最高境界
  12. 1012 sed 基本命令(进行中)
  13. vsftpd不支持目录软链接的解决办法
  14. 基于SSM的实验室预约系统
  15. 比赛计分软件部分界面抓图
  16. python实例方法不可以用类调用_为什么python静态/类方法不可调用?
  17. Topic 10. 单因素 Logistic 回归分析—单因素分析表格
  18. SpringBoot集成海康威视Linux版本
  19. 【2018亚太数据中心峰会】黄超:从供到需-中国IDC产业发展的环境分析
  20. Java8 新特性 (五)Stream API

热门文章

  1. nova-scheduler详解 openstack-ice版
  2. JS判断数组里面是否包含指定的数
  3. java基础--集合Connection/Map
  4. 一次DPM备份Exchange DAG的故障处理过程
  5. 云计算的优势有这6点
  6. 14. 变更管理(Change Management)
  7. H5中滚动卡顿的问题
  8. Shiro 教程,Shiro教程0.2 下载,Shiro功能修复与升级说明。
  9. go语言编程之字符串操作
  10. 每次开机都出现Trojan.DL.Dagi.b 病毒的问题