Keil C51 存储模式
之前碰到过这么一个问题:一份keil C51工程,里面有几百个函数,大部分函数在运行过程中都会被调用,后来需要调试某个功能,就将主函数main里面其它功能函数的调用注释掉,结果编译后报出一堆溢出错误,当时就懵了,难道函数只定义不调用占的空间还会比调用占的空间大?仔细看了编译信息,发现都是跟数据空间溢出有关,再深入研究发现,跟keil中的存储模式有关。下图展示的就是keil 中的memory model

在keil的帮助手册中找到下图信息,其实这三种存储模式是指定默认状态下各种变量和参数的存储位置

small model description

compact model description

compact model description

Small:变量存储在内部ram里;small模式下,再入函数的堆栈是设在 idata中的
Compact:变量存储在外部ram里,使用页8位间接寻址; compact模式 下,再入函数堆栈是设在pdata中的
Large:变量存储在外部Ram里,使用16位间接寻址;
这几个选项只是影响没有特别指定变量的存储空间的时候,默认存储在哪里