打印

MPLAB编译内存占用的困惑

[复制链接]
6303|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 | 只看该作者
char型

使用特权

评论回复
5
yewuyi| | 2011-3-2 13:32 | 只看该作者
也许你这个变量参与了特别复杂的运算,造成需要开辟很多的中间变量。

另外,这个错误也未必就是说少了23个字节吧。

使用特权

评论回复
6
LUCONGWEN|  楼主 | 2011-3-3 15:08 | 只看该作者
不是的,这个变量我在头文件定义了下,
uchar  test;
然后我随便在一个在函数里试用
if (test==0)  return;

没有增加任何的运算。

使用特权

评论回复
7
宜康家园| | 2011-3-4 09:59 | 只看该作者
一点意见啊,我觉得问题是这样的,采用C编译的时候,由于PIC的数据寄存器比较少,一般变量声明会占用很多,有时就会接近把所有的内部数据寄存器占了。这个时候,编译时会提示出错。主要的原因我因为可能是编译器必须留出部分内存,用于处理函数中的临时变量。所以你需要优化变量声明,减少全局变量的数量,或者改用内存大的单片机。

使用特权

评论回复
8
jchaodong| | 2011-3-4 10:20 | 只看该作者
堆栈设置呢?内存少的时候,c语言是不好看出来的

使用特权

评论回复
9
LUCONGWEN|  楼主 | 2011-3-15 14:11 | 只看该作者
PIC16F684是8级硬件堆栈,不存在堆栈溢出的问题。
当然,如果程序调用太多层,编译会告警堆栈溢出的,这个我遇到过。

使用特权

评论回复
10
SeaSun| | 2012-1-30 16:23 | 只看该作者
找不到连续的23字节空间   把新增的变量放到其他 bank去

使用特权

评论回复
11
asspeed| | 2012-1-30 17:21 | 只看该作者
LS正解,LZ还在用老版本的编译器。

使用特权

评论回复
12
fzsw1980| | 2012-1-31 09:21 | 只看该作者
一直用汇编写的,从没碰到过这样的问题,建议找原厂的技术支持

使用特权

评论回复
13
奥卡姆剃刀| | 2016-3-22 10:07 | 只看该作者
学习一下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

32

主题

102

帖子

1

粉丝