MPLAB编译内存占用的困惑

[复制链接]
7683|12
 楼主| LUCONGWEN 发表于 2011-3-2 08:36 | 显示全部楼层 |阅读模式
我试用PIC16F684,写了一个程序,C编译告诉我内存用了116字节。
Data space           used    74h (   116) of    80h bytes   ( 90.6%)
可我增加一个变量时,就变成内存不够,少了23字节了,这是为什么呢?
Error   [1254] double.c; 55. could not find space (23 bytes) for data block
yewuyi 发表于 2011-3-2 09:11 | 显示全部楼层
这有很多种可能,不好分析。
XIEYUANBIN 发表于 2011-3-2 12:54 | 显示全部楼层
什么变量?长整形?
 楼主| LUCONGWEN 发表于 2011-3-2 13:07 | 显示全部楼层
yewuyi 发表于 2011-3-2 13:32 | 显示全部楼层
也许你这个变量参与了特别复杂的运算,造成需要开辟很多的中间变量。

另外,这个错误也未必就是说少了23个字节吧。
 楼主| LUCONGWEN 发表于 2011-3-3 15:08 | 显示全部楼层
不是的,这个变量我在头文件定义了下,
uchar  test;
然后我随便在一个在函数里试用
if (test==0)  return;

没有增加任何的运算。
宜康家园 发表于 2011-3-4 09:59 | 显示全部楼层
一点意见啊,我觉得问题是这样的,采用C编译的时候,由于PIC的数据寄存器比较少,一般变量声明会占用很多,有时就会接近把所有的内部数据寄存器占了。这个时候,编译时会提示出错。主要的原因我因为可能是编译器必须留出部分内存,用于处理函数中的临时变量。所以你需要优化变量声明,减少全局变量的数量,或者改用内存大的单片机。
jchaodong 发表于 2011-3-4 10:20 | 显示全部楼层
堆栈设置呢?内存少的时候,c语言是不好看出来的
 楼主| LUCONGWEN 发表于 2011-3-15 14:11 | 显示全部楼层
PIC16F684是8级硬件堆栈,不存在堆栈溢出的问题。
当然,如果程序调用太多层,编译会告警堆栈溢出的,这个我遇到过。
SeaSun 发表于 2012-1-30 16:23 | 显示全部楼层
找不到连续的23字节空间   把新增的变量放到其他 bank去
asspeed 发表于 2012-1-30 17:21 | 显示全部楼层
LS正解,LZ还在用老版本的编译器。
fzsw1980 发表于 2012-1-31 09:21 | 显示全部楼层
一直用汇编写的,从没碰到过这样的问题,建议找原厂的技术支持
奥卡姆剃刀 发表于 2016-3-22 10:07 | 显示全部楼层
学习一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:古今多少事,都付笑谈中。

32

主题

102

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部