ram是用来在程序运行中存放随机变量的数据空间,51单片机默认的内部ram只有128字节,52单片机增加至256字节,stc89c52增加到512字节,stc89c54、55、58、516等增加到1280字节,对于编程者来说,一个芯片的ram越多,写起程序来就越容易得心应手,不会总考虑ram不够用而担心这担心那,连过多的变量都不敢定义。
在前面我们写程序时曾讲到过,如果定义一个变量后,不对这个变量进行初始化,这个变量默认的初值就是0,其实这个结论是需要一定的条件的,在用keil编写程序时,总程序中所有变量占用的字节之和小于128字节,并且存储器模式为small模式的前提下,对定义的变量不进行初始化时,编译器会默认将变量值设定为0。一旦程序中的总变量超过128字节,必须对所有变量进行初始化,否则,没有被初始化的变量默认值将是不确定的。当变量总和超过128字节时,必须还要在编译器中重新设定存储器的存储模式,存储器模式一共有3种,分别为small、compact和large模式,在keil编译器中有选项可进行选择,选项表如图4.4.1所示。它决定了没有明确指定存储类型的变量、函数参数等数据的默认存储区域。如果在某些函数中需要使用非默认的存储模式,也可以使用关健字直接说明。下面对这三种模式分别做介绍。
1. small模式
small模式中,所有缺省变量参数均装入单片机内部128字节ram中,当定义类似如:uchar a; float b;等变量时,这些变量都装入内部128字节ram中。使用该模式的优点是访问速度快,缺点是空间有限,而且是对堆栈的空间分配比较少,难以把握,碰到需要递归调用的时候需要小心。所以这种模式只适用于小程序。
2. compact模式
compact模式中,所有缺省变量均位于单片机内部256字节ram中,和在small模式中使用关健字pdata来定义变量的效果相同,如:uchar pdata a[100];在该种模式下,程序总变量不得超过256字节,对于只有128字节的单片机,使用此模式定义变量超过128字节时,程序将出错。优点是空间较small模式宽裕,速度较small慢,但较large要快,是一种中间状态。
3. large模式
在large模式中,所有缺省变量可放在多达64kb的ram区,包括内部ram和外部ram,和使用关健字xdata来定义变量的效果相同。这种模式的优点是空间大,可存变量多,缺点是访问速度慢,尤其对于2个以上的多字节变量访问速度来说更是如此。
方便起见,stc单片机要访问扩展ram时,可直接用以下方法:首先在编译器中设置存储器模式为large模式。
其次,为安全起见,当程序中定义多于128字节的其它变量时,最好申明为xdata型,如 uchar xdata table[100];意思为定义一个100个字节容量的数组,将其在扩展ram中分配存储空间。另外一定要注意,在large模式下,编写程序时,定义的变量总数千万不要超过对应单片机的内部最大ram字节数,因为即使超过了,编译器也不会提示错误,但是程序必定会出错。
超级电容器的原理是什么,简单分析一下
机载光学全谱段遥感林火监测
国芯思辰|芯北科技线性稳压器CN88L025替代TI的LM1084车载快充充电器应用
AGM推出AGM H2手机,搭配虎贲T310芯片与前置扬声器
如何选购cpu风扇
STC单片机内部扩展RAM的应用
智慧交通的建设则怎样可以提速
plc编码器作用_编码器z相作用
家电维修赚钱秘方 二 讲诚信
MDIO接口的基础知识详解
Vishay为商用及汽车应用推出单路ESD保护二极管
电池修复,电瓶反弹电压问题
自游家NV汽车将首批搭载地平线征程5芯片
基于一款通用版的智能家居设计方案解析
电池性能和成本成为支配电动重卡能否正常运营的关键点
专业厂家教你大电流锂电池保护板的保护方法和流程是怎么样的
Intel表示28核心56线程工作站级新品将依然使用硅脂
古尔曼:苹果明年将更新整个iPad产品线
I2C子系统优先级翻转与优先级继承
Wacom推VR Pen,展现跨现实的手写笔体验