Q&A:为什么Keil C中不用的函数占用data?

单片机相关 徐 自远 677℃

问题:

我编程很少使用idata,都是data和xdata,但是最近遇到一个问题,RAM使用超过128Byte了,外部RAM很小也用满了,所以我试着用idata,但碰到一些问题。
我有一个64Byte的数组,不要这个数组时,能编译通过。data<128的。
但加上这个数组,并且定义为idata,起始地址为0x80后,编译就通不过了,256>data>128的,但MCU本身是有256的内部RAM的,不知道这个是为什么?
不知道是不是要在Keil中哪里设置一下,还是其它的什么原因?

回答:

的确是RAM不够了,因为你没有把堆栈计算进去,所以虽然看起来小于256,但实际已经溢出。
从编译结果来看,你有好几个函数有实体但没有调用,这样是很浪费RAM的,因为KEIL因此会为这些函数中的局部变量都做了保留,相当于变成了全局变量来保存,如果你不想删除这些函数,那就教你个办法,在程序初始化阶段:
i=0;
if(i)
{

不需要调用的函数;

}搜索
这样就能把RAM省下来了。
记住,嵌入式编程时,任何一个RAM空间都是十分宝贵的,可不能像PC程序那样用啊。一些对性能要求不高的变量,或使用不频繁的变量最好定义到XDATA中去。

 

追问
追答

转载请注明:徐自远的乱七八糟小站 » Q&A:为什么Keil C中不用的函数占用data?

喜欢 (2)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号