打印

关于单片机DATA空间的问题。

[复制链接]
2473|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Lows|  楼主 | 2012-10-31 18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint POW(uchar i,j)
{

uchar k;uint l,a=i;

for (k=0;k<=j;k++)

{

a*=i;

l=a/100;

}return l;
}

uchar math(uchar i,j,uint k)
{

uchar l;

uint a;

a=POW(10,i-(j+1));

l=k/a%(j*10);

if(l>9) l%=10;

return l;
}

void SHOW(uchar x,y,uchar *p,uint q,uchar sz,color)
{

uchar i=0,k=0;

while (*p)

{

if(*p==32) CHN(x,y+i*8,8,&nAsciiDot[(math(sz,k,q)+16)*16],k+1==color),k++;

else

{

CHN(x,y+i*8,8,&nAsciiDot[(*p-32)*16],0);

}i++;p++;

}
}

这是本人编的一个小程序段。经过编译发现占用的 30个字节的DATA空间

《连接器提示》 Program Size: data=100.6 xdata=0 code=4735


本人百思不得其解。这明明不是很长的程序为什么这么占空间。。求大神解释。。

相关帖子

沙发
Auir| | 2012-10-31 19:45 | 只看该作者
你的CHN函数从何而来???

使用特权

评论回复
板凳
forgot| | 2012-11-1 08:46 | 只看该作者
CHN

使用特权

评论回复
地板
ayb_ice| | 2012-11-1 08:51 | 只看该作者
CHN函数又多,参数还是个函数,CHN又被SHOW调用,SHOW参数又多。。。

另外POW数学函数也可能是罪魁祸首,

有这样一句话,KEIL帮助文档里的“一个复杂的数学函数可能将51的堆栈空间全部耗尽”

使用特权

评论回复
5
Lows|  楼主 | 2012-11-2 07:28 | 只看该作者
4# ayb_ice 额。。POW是我自己定义的呀。。

使用特权

评论回复
6
Lows|  楼主 | 2012-11-2 07:29 | 只看该作者
uchar xp(uchar i)
{
        if(i<=63) CS1=1,CS2=0;
        else
        {
                CS1=0,CS2=1,i-=64;
        }return i;
}

void chn(uchar x,y,yy,uchar code*p,bit color)
{
        uchar i,j,k;
        wr_lcd(0,0x3f);wr_lcd(0,0x3f);
        for (j=0;j<2;j++)
        {
                for (i=0;i<yy;i++)
                {
                        k=xp(i+y);
                        wr_lcd(0,0xb8+x+j);
                        wr_lcd(0,0x40+k);
                        color? wr_lcd(1,~p[j*yy+i]):wr_lcd(1,p[j*yy+i]);
                }
        }
}

使用特权

评论回复
7
Auir| | 2012-11-3 18:22 | 只看该作者
你的wr_lcd()函数从何而来。

一些数学函数会占不少的空间。

使用特权

评论回复
8
airwill| | 2012-11-4 12:25 | 只看该作者
编译发现占用的 30个字节的DATA空间
《连接器提示》 Program Size: data=100.6 xdata=0 code=4735

总共使用的空间以连接器提示的为准. 另外: 寄存器空间和位寻址空间也都要算进DATA空间去. 当然还有可能其他数据堆.

使用特权

评论回复
9
ningling_21| | 2012-11-4 21:27 | 只看该作者
函数参数 多了,有时很占用DATA空间的...

使用特权

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

本版积分规则

0

主题

8

帖子

0

粉丝