刚好在做单片机的项目,small模式下报错说空间不足,然后就换成large模式。

结果两者编译出来的结果,xdata相差60多k。

搜了一下,原来其它没声明data的数据,都默认地被编译器放到xdata区域了。

后来也发现了,原来之前报错是因为data区数据达到了154,超过了128,换成large后,data变成104所以才顺利通过。

【keil C51的Memory Model 说明[三种Model的选择对编译的影响]】

转自http://blog.csdn.net/snow416/article/details/6407177

Memory Model:用鼠标点击Memory Model的下拉箭头,会有3个选项:

Small:变量存储在内部ram里;

small模式下,再入函数的堆栈是设在idata中的

Compact:变量存储在外部ram里,使用页8位间接寻址;

compact模式下,再入函数堆栈是设在pdata中的

Large:变量存储在外部Ram里,使用16位间接寻址;

我们一般使用Small来存储变量,就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去。Compact的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部ram很少,只有256个字节,那么对该256个字节的读取就比较快,用MOVX @Ri,A 或MOVX A,@Ri指令。如果超过256字节,那么要不断地进行切换的话,就比较麻烦。Compact模式适用于比较少的外部ram的情况。Large模式,是指变量会优先分配到外部ram里,用MOVX A,@DPTR或MOVX @DPTR,A来读取。要注意的是,3种存储方式都支持内部256字节和外部64k字节的ram。区别是变量的优先(或默认)存储在哪里的区别。除非你不想把变量存储在内部ram,才使用后面的Compact,Large模式。因为变量存储在内部ram里,运算速度比存储在外部ram要快的多,大部分的应用都是选择Small的模式。

使用Small的模式:也不是说变量就不可以存储在外部,一样可以存储在外部,只是你要指定,比如:

unsigned char xdata a;那么变量a就存储在外部的ram。

unsigned char a;变量存储在内部ram。

使用Large的模式:

unsigned char xdata a;那么变量a就存储在外部的ram。

unsigned char a;变量存储在外部ram。

这就是区别,就是说这几个选项只是影响没有特别指定变量的存储空间的时候,默认存储在哪里,比如上面的变量定义unsigned char a。

如果在变量声明时未声明变量的存储器类型,则该变量的存储器类型,由程序的存储模式来决定。

小模式(small model):默认data区

紧凑模式(compact model):默认pdata区

大模式(large model):默认xdata区

c语言编写keil 设置memory model的编辑器,keil C51的Memory Model 说明[三种Model的选择对编译的影响]】...相关推荐

  1. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV

    @Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...

  2. 【蓝牙mesh】蓝牙Mesh的三种Model

    蓝牙Mesh节点集成的Model可以分为三种类型:Server.Client和Control. Server Model:暴露自己的状态(states)给其他Model访问,比如一个灯,可以暴露开和关 ...

  3. 教你三种Model(AR)中自定义验证规则的方法

    2019独角兽企业重金招聘Python工程师标准>>> 各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知 ...

  4. 菱角图形输出c语言,CDR将多边形/图形的角度变圆?CDR制作圆角图形的三种方法

    在CorelDRAW中如何将多边形/图形的角度变圆.可能在以早的版本中,都没有直接实现圆角多边形的功能,直到后来较高版本中提及的圆角/扇形角/倒棱角功能的出现,才很好的解决了这个问题,其实方法也不止是 ...

  5. 将数据写入数据库:打开数据库,建库建表,通过php访问后台服务器(连接服务器(三种),选择数据库,设置字符集:防止数据乱码),通过php对数据库进行:增,删,改,查,操作

    前端表单设计以后,需要把数据写入数据库 将数据写入数据库:         如果涉及php.sql,wamp服务器必须打开         wamp里面有一个专门,图形化的移动窗口:          ...

  6. while语句和for嵌套c语言,关于循环的嵌套,说法错误的是() 答案:三种循环(while循环、do-while循环和for循 环)不可以互相嵌套。...

    相关问题 在C语言中,为了结束由while语句构成的循环,while后一对圆括号达式的值应该为(): C语言 中 结束 while 语句 循环 while 后 圆括号 值 学生,意识,生命体征,气道, ...

  7. 三种model 在lfw 上的精度

    wuxiang 发布的model_C的结果 ap:           99.864831 eer:          98.800000 tpr001:       98.600000 tpr000 ...

  8. 宝塔php怎么设置回收空闲进程,宝塔面板-回收站爆满后清理的三种方式

    宝塔面板自带回收站,这个回收站还是很有用的,不过很多人会忘记清理回收站,时间一久导致磁盘爆满,打不开面板. 不过回收站这个功能确实是不错的,当我们删错网站或.数据库.文件等,我们可以到回收站里还原,虽 ...

  9. vue设置html自动跳转路由,vue路由跳转的三种方式是什么?

    本教程操作环境:windows7系统.vue2.9版,适用于所有品牌电脑. vue中通过路由跳转的三种方式 router-view 实现路由内容的地方,引入组件时写到需要引入的地方, 需要注意的是,使 ...

  10. 用c语言编程井字游戏,用C语言编写的井字游戏源代码(井字三个级别)

    井字游戏用C语言编写的源代码: //程序5. 8井字游戏#include int main(void){int player = 0;赢家= 0; int选择= 0; unsigned int行= 0 ...

最新文章

  1. SQLite的数据类型总结
  2. SEO优化简要工作流程
  3. [JavaWeb-XML]XML约束概述
  4. druid连接池初始化慢_7、SpringBoot -连接池(Durid)
  5. 大话数据结构 (程杰 著)
  6. 最长递增子序列 子串_最长递增奇偶子序列
  7. XFire WebService开发快速起步
  8. vue 指令 v-on 事件修饰符-键盘事件-键盘事件梳理
  9. 第 19 次 CCF CSP 认证 202006-4 1246(digits)
  10. 从Iris数据集开始---机器学习入门
  11. 商品库存清单案例java_java实现超市商品库存管理平台
  12. 深入了解C++与C语言的区别
  13. 揭秘Keras推荐系统如何建立模型、获取用户爱好
  14. webpack 无法加载文件 C:\Users\User\AppData\Roaming\npm\webpack.ps1,因为在此系统上禁止运行脚本。
  15. 方舟服务器物品代码,方舟:生存进化 全物品代码ID一览 物品修改代码大全
  16. BP神经网络:误差反向传播公式的简单推导
  17. 响应式开发原理及Bootstrap栅格布局详解
  18. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义飞书告警
  19. 直播系统解决方案:直播平台如何开发搭建
  20. 阿里巴巴2016算法岗实习招聘(西安)在线笔试整理

热门文章

  1. 笔记本计算机外壳的制作过程,笔记本电脑外壳选材不可小视
  2. DNS服务双解析邮箱地址
  3. 360 php SQL注入,php中sql注入漏洞示例
  4. security java的配置_springSecurity之java配置篇
  5. Linux服务器部署javaweb项目,从环境配置,到最终系统运行
  6. 框架的配置文件的映射机制
  7. Delphi中TStringList类常用属性方法详解
  8. Eclipse用法和技巧二十:一个快速打印技巧
  9. javascript设计模式——Module
  10. 使用mustache js模板引擎