,请问单片机的最大内存容量量是多大,就是说最大能装多大的程序

新手如何入门单片机开发新手如何入门单片机开发数字科技百家号如果你懂一些计算机原理和C语言开发,读下面的文章就不会很费劲。但如果不懂也没关系,那就交叉学习吧。什么是单片机从CPU说起。CPU(Central Processing Unit, 中央处理器)CPU由运算器、缓存器及总线构成。其中,运算器是指ALU(Arithmetic logic unit,算术逻辑单元),是CPU的核心;缓存器(Cache)可分为一级缓存、二级缓存和三级缓存,容量逐步递增,读写速度速度递减,成本递减;总线(Bus)分为数据、控制和状态三种。典型代表:8086。物理结构从物理结构上看,CPU可分为逻辑部件、寄存器部件和控制部件。逻辑部件主要用于定点或浮点算术运算操作、移位操作和逻辑操作;寄存器部件可分为通用、专用和控制。每一种寄存器都有它自己的用处;控制部件主要用于指令译码和发出控制信号。性能参数作为数据处理的中心,最主要的参数可以说是主频和外频了。先说外频,外频是基准频率,它决定了主板的运行速度,人们所说的超频,超的就是外频。主频=外频*倍频主频,又叫时钟频率。由上述公式可以看出主频由外频决定。主频表示CPU内数字脉冲信号震荡的速度,它可以说明CPU的运算和处理数据的速度。简而言之,主频越高,CPU越快。CPU每做一个动作,处理数据或发布命令,都要随着主频的节奏来。所以这是个很有节奏感的东西。计算机(Computer)依照冯诺依曼体系,计算机的五大组成部件为运算器、控制器、存储器、输入设备和输出设备。其中运算器和控制器合起来就是CPU;存储器又可以拆分为内存和外存;输入和输出设备就是键盘、鼠标、显示器等。处理器运算器和控制器可以合称为处理器,CPU主要就是这两个部件。前者负责数据处理,后者发布命令。存储器存储器主要是指内存(RAM,Random Access Memory,随机存取存储器),靠电容的充放电存储电容信号进而可在逻辑上表示数字信号。由于电容充放电速度很快,所以内存的读写速度仅次于CPU中的缓存。但又因为是电容,所以无法在不通电的情况下存储这些信息。这样就催生了ROM,为了保存数据但只能写入一次的只读存储器。再后来为了能擦了重写就出现了EPROM和EEPROM等可擦写ROM。硬盘、U盘等都是前者的衍生物,他们都统称为外存(external storage),其主要作用就是在断电的时候能够保存数据。因为涉及到物理动作(掰硬盘里面的小磁针、在光盘上烫洞),所以相对于内存的速度要慢上要几个档次。I/OI/O就是与之交互的基础了,通过输入设备来告诉它,通过输出设备来告诉你。就是机器交互的耳朵和嘴了。单片机(MCU, Microcontroller Unit)是一种集成电路(IC, Integrated Circuit),其实应该叫微控制器,单片机这个名字主要是指之前的SCM(Single Chip Micyoco, 嗯… Micyoco是个神奇的单词)。而现在MCU是由SCM发展而来的,在高级点就可以说是SoC(System on Chip)。但后面的我所提到的单片机就是说MCU啦(因为我主要玩了下51单片机,这个是什么鬼我后面会说)。说正事儿,单片机可以说是“浓缩的计算机”而不是“浓缩的CPU”,首先维基百科对他的解释是:a small computer on a integrated circuit。其次是因为它内部不仅仅有运算器、控制器和寄存器这种CPU三件套,他还常封装有RAM、ROM这种存储器部件,还有I/O口供人们编程及操作。所以总结来说,他有处理器、存储器和I/O,也算是符合冯诺依曼体系的“浓缩计算机”。应用领域说到这种“浓缩计算机”的应用,可以说是广到没朋友。智能仪表、实时工控、通讯设备、导航系统、家用电器等等。随着物联网(IoT)时代的到来,单片机可谓再一次大展神威,我们手中的控制端可能是手机这种高级玩意儿,但是用来控制设备电路的接收端就是单片机要做的事情了。让家用电器接入网络,就是在其内部放一块带Wifi模块的单片机即可。封装类型刚才说到它算一个计算机,他的那些部件都是怎么放在一起的?这就涉及到封装问题了。以下列出主要的单片机封装形式。封装全称中文名称DIPDual In-Line Package双列直插式封装PLCCPlastic Leaded Chip Carrier带引线的塑料芯片封装QFPQuad Flat Package塑料方形扁平式封装PGAPin Grid Array Package插针网络阵列封装BGABall Grid Array Package球栅阵列封装这里不做详细描述,具体资料可点击封装名称进入查阅。51单片机你若是初学单片机,并且直接上网去查“单片机入门”之类的关键词,你绝对会看到“51单片机什么什么的”。谁知道51单片机是啥玩意,一开始我还以为51是个牌子,然后就开始吐槽满世界的广告啊,能不能安安静静的学个单片机啊。什么是51单片机百度百科的摘要是这样说的:51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。维基百科是这样说的:The page "51-MCU" does not exist. You can ask for it to be created, but consider checking the search results below to see whether the topic is already covered.嗯,看来这个词是国内出来的。根据百度百科上的内容我们可以了解到如下信息KeyValue指令集8031始祖Intel 8004 单片机8位I/O线32条这跟“51”有个蛋的关系啊?!后来了解到,这款单片机的起点是Intel的MCS51系列单片机,此系列包括:,,等,后来Intel普度众生,将技术传了下去。人们将后来的那些单片机都统称为51单片机。那为毛我入个门就给我个51单片机啊?!因为此款单片机应用非常广,而且支持在线编程(ISP, In-System Programmability),用它可以搭建比较为复杂的系统,相较于其他8位单片机(AVR、PIC)而言,他出现较早,可以获取大量学习资料。所以…引脚单片机的操作向来靠引脚,51系列也不除外。常见的是40脚DIP封装,以此为例说说以下几类引脚。电源说明Vcc电源,用于引入正电平GND地线,引入负电平关于电平的资料请参考:逻辑电平时钟XTAL2片内震荡电路输出端XTAL1片内震荡电路输入端编程控制RST用于复位PSEN当有扩展ROM时用,在读外部ROM时,低电平有效ALE/PROG当有扩展RAM时用EA/Vpp当有扩展ROM时用,高电平读取内部ROM,低电平读取外部ROMP0双向,8位,三态P1准双向,8位P2P3准双向,8位,拥有第二功能P3第二功能定义:标号第二功能P3.0RXD串行输入口P3.1TXD串行输出口P3.2INT0外部中断0P3.3INT1外部中断1P3.4T0定时器/计数器0外部输入端P3.5T1定时器/计数器1外部输入端P3.6WR外部数据存储器写脉冲P3.7RD外部数据存储器读脉冲扩展的关键字单片机编程支持汇编和C,其他的我没用过也不太清楚。如果入门的话最好的选择就是C啦,首先你很有可能学过C,就算没学过也很好上手,去买本谭浩强的《C程序设计》吧。除了标准的ANSI C关键字外,单片机编程还扩展了如下几个类型的关键字:位标量说明关键字bit声明一个位标量或位类型函数sbit声明一个可位寻址变量特殊功能寄存器声明sfr声明一个特殊功能寄存器sfr16声明一个16位的特殊功能寄存器存储器类型说明data直接寻址的内部数据存储器bdata可位寻址的内部数据存储器idata间接寻址的内部数据存储器pdata分页寻址的外部数据存储器xdata外部数据存储器code程序存储器其他interrupt定义一个中断函数reentrant定义一个再入函数using定义芯片的工作寄存器STC89C52我的第一个实体单片机开发,就是这款了,STC89C52,可以说是增强型8051单片机。来,先看一下它的配置:核心MCS-51最高运作频率35MHz物理参数39工作温度商业级:0°C~75°C;工业级:-40°C~85°CRAM512BROM8KBEEPROM4KB功能定时器3个串口1个,全双工外部中断4个看门狗支持内置复位ISP/IAP可选模式掉电模式空闲模式我的这款的具体型号为:STC89C52_35I_PDIP40_1550HHT352.C90C关于标识命名规则请参阅:STC全系列芯片命名规则说明(http://blog.sina.com.cn/s/blog_6jft.html )软件准备既然要编程,我们就需要开发环境,你可以选择Keil,也可以选择加载Keil插件的Eclipse。代码写好后,通过编译器编译成单片机可以识别的机器码。机器码通常会保存为.hex文件,这个文件可以用那些十六进制文件查看器查看。这个文件的数据要写入到单片机的程序存储器中,通常为一个ROM。通常买的开发板都会集成串口及其芯片,还有配套的下载软件。你只需要安装好它的串口芯片的驱动程序,然后用下载器直接下载就好。如果是自己焊的板子就会麻烦一些了。这里不做说明,因为笔者还没干过。还有一种就是通过Proteus模拟,在没有实体板的情况下可以考虑这种方式。Proteus可以模拟单片机的逻辑线路和演示效果。向里面的逻辑单片机下载程序的话,更是十分方便,在Proteus内可以很方便的操作完成。若是要模拟单片机与PC通信,那你就需要一个模拟串口连接的程序了---VSPD(Virtual Serial Port Driver)。列个清单程序Keil单片机开发的IDE,支持编译c、asm、c++。单片机串口驱动用于让计算机识别单片机Proteus模拟集成电路,可以演示效果VSPD模拟串口连接程序下载程序用于将编译好hex文件下载到单片机一个软工狗的总结作为一个软工狗,我对我们专业的理解是更专注于一个软件的工程项目的始终而不是技术实现,偏向于“工”。而单片机开发是更加贴近计算机底层的一种开发,更偏向于“理”,而且也不会采用面向对象的思想。所以,比起之前所做的网页开发也好,客户端开发也罢,都显得更加不友好。内存可能不够用在开发过程中会开始考虑内存够不够用这种问题,这个是现代IT学子几乎不会考虑的问题,不说电脑,手机的内存都大的一腿,但是来到单片机的地盘,你就得考虑了,考虑好不要动不动就上个double(我目前用的最长的变量类型也就是unsigned int),而且为了拓展范围长度还要考虑是不是要把变量声明称无符号类型,更严重的情况可能还要掰指头数清楚你的变量有没有声明的太多。一切从优也是因为硬件资源的限制,所以在做一些实现的时候你不能只考虑如何实现,还要考虑单片机吃不吃得起你的代码。所以在这个领域,面向对象这种思想是基本弃用的(面向对象的思想向来是对程序员友好,对机器不太友好的)。考虑好你程序的时间及空间复杂度,因为单片机不仅内存小,主频一般也特别低。二进制是爸爸好好的巩固一下之前所学的C语言吧,还有二进制操作才是爸爸级别的操作。说到这一点其实还是因为硬件资源的限制。各种且或非、异或、移位会让代码变得高效,虽然我们之前并不习惯这样做。其实很多牛逼的程序员都会很擅长使用二进制操作,因为这样很对机器的口味(1024吧,凑个整)。很好玩!不像客户端或web开发,我们只是在调用,很少有思维上的突破。我觉得单片机开发会更灵活,你可以去网上花十块钱不到买各种小部件添加上去调用着玩。自己设计小型自动电路是我觉得再有趣不过的事情了。怎么个开始要是没学过C语言,先去把C学了。若是学好了,那就了解基础知识后直接实战。关于实战,我的建议是,先在Proteus上模拟,等稍微熟练再往实体开发板里写。一个是因为Proteus模拟,能简单实践一下画板子,可以学习简单的线路,但又不像真正画板子那样麻烦。另一个是因为单片机的程序存储器的擦写次数是有限的,虽然这个次数也不用特别在意,但是能少一次就少一次嘛。到了实体开发板阶段,就不是为了验证你的程序逻辑了,而是解决实际问题,因为Proteus并不会完美模拟出实际情况,这也是由模拟到实践的真正过度。最后,可以自己买各种工具(洞洞板、锡丝、松香、烙铁、吸锡器、烙铁架)来焊个板子,在自己焊的板子上编程。这样就完成了从焊到编再到实现的一条龙DIY。我很推荐软工狗们尝试单片机开发,因为这可以让你对计算机原理和底层有更深的认识,还可以体会到设计并实现各种DIY小器件的乐趣。望各位就着汗水尽情释放创造力吧!本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。数字科技百家号最近更新:简介:数码圈资深人士,搞机大神作者最新文章相关文章单片机内程序运行的时候ram空间是如何分配的?
单片机内程序运行的时候ram空间是如何分配的?
我现对一个程序进行减少片内ram的使用的优化,有一些效果,同时也产生了些疑问,在此向各位大虾请教:
一、现象:
1、&&&&我在通过减少全局变量、函数内变量的使用,减少函数间参数传递等手段来优化,发现某些时候我减少一个变量的使用,keil编译的结果就显示data减少了一字节,有时候这样一直减少几个变量的使用,data值一直都不会变,接着再减少变量的使用,又会一个一个的减少,到后来又不减少了。
2、&&&&我屏蔽程序中一些代码之后编译,显示data反而是增加了。
二、疑问:
1、单片机程序运行的时候,内部ram是如果分配管理的,data值由哪些部分组成?
2、之前描述的两个现象如何解释?
3、data值是不包括堆栈空间的,那么程序运行的堆栈空间大概需要多少,和哪些因素有关,能不能预估?
4、单片机片内ram的使用限度是多少?(指keil编译出来的data值最好不要超过多少)&&
答:单片机内程序运行的时候ram空间是如何分配的
1、RAM的分配是与你选择的编译模式有关,你可以看下编译器的手册,再打开最后产生的分配对照表仔细对照源程序,应该可以找到规律。
2、仍然与编译模式有关,通常全局变量数量的变化可以立即反映在data段的长度上,但如果局部变量是指定用堆栈,就不一定会反映在data段的长度上了。
3、堆栈空间与你的RAM空间的分配有关,这是在连接时确定的,在链接描述文件中指定的。
4、RAM的使用限度当然跟你的单片机RAM的大小有关。
对不起,我对Keil的环境不熟,我不能帮你解释具体到Keil上如何;上面讲的是基本原理,每个C语言的环境都是这样。
谢谢平常人!若有机会到广佛一带,我请你喝酒!
keil编译模式我选择的small:variables in
data模式,大家一般也都应该是这个模式吧。变量都是定义到data/idata区的。
keil编译结果和编译器本身有关,就算是不同的编译器,在内存分配上是不是有共同遵从的方法呢?
或者您能不能介绍其他某个编译器的内存分配方式呢?
通常全局变量数量的变化可以立即反映在data段的长度上,但如果局部变量是指定用堆栈,就不一定会反映在data段的长度上了。
re:你的意思是局部变量占用的空间的使用还不一定包含到编译结果里了?我编译的结果是200多字节的data,由哪些组成?
ram使用限度跟单片机有关,那好比我的单片机片内ram是256的,那我使用的空间(也就是keil编译出来的结果)的限度是多少,或者和哪些有关?也就是通常做法,我要留给堆栈多少空间?
另外再问一下:
同一个程序生成的bin文件和hex文件在大小上有什么关系?
听说bin会是hex的一半?
这两个文件在使用中有什么区别?
变量在内存的分配方式
通常单片机的RAM区可以分成3类,短地址区、长地址区和外部地址区。
短地址区一般指00-FF之间可以用8位地址访问的区域,长地址区一般指0100-FFFF之间必须用多于8位的地址访问的区域,外部地址区指CPU外部总线访问的区域,不同的区域有不同的指令寻址方式,例如:
MOV A, 40H ;访问短地址区
MOV A, @DPTR ;访问长地址区
一般的51中没有外部地址区。
根据用途还划分了一个堆栈区。
不同的存储分配模式决定了全局变量是放在那个区域,访问短地址区的指令可能比访问长地址区的指令短且快,但长地址区可容纳较多变量,尤其是较大的数组。
局部变量有两种分配策略,一种是放在堆栈中,因为局部变量只在他所在的函数中有效,出了这个函数退栈就可以清理掉局部变量所占空间,空间可重复利用。这种策略下,减少局部变量的使用并反映不出内存占用量的减少,因为内存的占用是动态的。
另一种策略是分析函数调用关系,把局部变量放在某段特定的内存区,如下例:
x1, x2, x3;
编译器发现func1与func2没有调用关系,就把c1与x1分配到同一个地址,c2与x2分配到同一个地址,x3分配到另一个地址;这样处理可以比堆栈的方法得到较高的效率。当你减掉c1时,并没有减少内存的总用量。
所以,堆栈的长度要看你程序的调用关系,局部变量的使用策略等因素,根据实际情况决定。
至于bin与hex文件的区别,我的理解bin是用二进制的形式存放可执行代码,而hex文件使用ASCII形式存放可执行代码;如
&&0x12, 0x34,
0x56&&bin文件
&&1 2 3 4 5 6 hex文件
你说他们的大小是什么关系?
对不起,我只能讲这么多了,再讲就可以写一本书了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。本页链接:
第1个回答:
来自电脑网络类芝麻团
STC最新系列的ROM有64K的,这个容量很大,因为一般单片机程序只有几K,十几K的就是很大的程序了。
猜你感兴趣单片机内存最大有多大啊_百度知道
单片机内存最大有多大啊
我有更好的答案
单片机的总类太多了。以51为例。早期的ATMEL内存(RAM)为256BYTES。片外可以扩展到64K现在不同厂家的单片机RAM差别很多。仅片内集成的RAM容量从256BYTES-4096BYTES,甚至更大。STC15F4K系列的片内RAM可以到4096BYTES。RAM的大小受数据总线宽度影响,现在32位总线处理器,RAM已经有到几百KBYTES的,甚至更大。STM32F20X/40X 最大RAM达到200K
采纳率:77%
为您推荐:
其他类似问题
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 最大内存容量 的文章

 

随机推荐