keil C51的Memory Model 说明[三种Model的选择对编译的影响]
来源:互联网 发布:java asset的用法 编辑:程序博客网 时间:2024/05/17 09:21
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区
- keil C51的Memory Model 说明[三种Model的选择对编译的影响]
- keil C51的Memory Model 说明[三种Model的选择对编译的影响]
- Keil Memory Model
- KEIL Memory Model
- Java Memory Model的介绍
- STM8 的MEMORY MODEL应用
- Keil C51中printf()函数的说明
- train data 和 model bias 对 Mutilayer Perceptrons 的影响
- Keil中Memory Model和Code Rom Size说明
- Keil C51 的printf
- Java Memory Model引发的血案
- 对model的解归档
- 改变 model 的三步
- Keil C51对C语言的关键词扩展之三: bdata
- KEIL编译模式的选择
- keil C51初始化代码 Startup.a51的中文说明
- Keil C51初始化代码 Startup.a51的中文说明
- Keil C51初始化代码 Startup.a51的中文说明
- RAS - Reusable Assert Specification (www.omg.org-spec-RAS-05-11-02.pdf)
- J2SE学习笔记3 — Java基本语法(4)类型转换
- javascript
- php中mysql_affected_rows()返回-1带来的“陷阱”
- 主线程退出,不代表进程会终止
- keil C51的Memory Model 说明[三种Model的选择对编译的影响]
- 2010年度总结和2011年度计划(迟来的)
- 想在社会上混 就记住这20句话
- 查占资源多的表
- fatjar安装(myeclipse6.5版本)
- UTF-8 and Unicode FAQ for Unix/Linux
- Android 学习笔记(六)
- Lucene:基于Java的全文检索引擎简介
- 前端工程师应该关注些什么