刚开机下载进去,堆栈就溢出了~不知道什么原因
刚刚把程序下载进去,还没有运行,就提示堆栈溢出了:Wed Apr 25 16:12:28 2012: The stack 'Stack' is filled to 99% (4992 bytes used out of 5000). The warning threshold is set to 90.%
我的堆栈是5000的呀,而且这个程序在别的工程上有没有问题,我这个工程就是在原来的工程上添加了一些代码而已。
这是什么原因呢?
运行之后,也没见占用多少堆栈,就是编译的过程中飙升使用堆栈?
void Set_RTC_time(void)
{
int Gottime=0;
int yy,MM,dd,hh,mm,ss;
char *date_p;
//读取GPRS模块的时间
while(Gottime==0)
{
clean_uart0_rx_buff();
UART0_Send_Str("AT+CCLK?\r\n"); //读取模块时间日期
for(int i=0;i<1000;i++)
{
__delay_cycles(25000);
UART0_RX_BUF[UART0_RX_MAXLen-1]=0x00;
if(strstr(UART0_RX_BUF,"+CCLK:")) //等待模块准备好“返回"+CCLK:"
{
while(Interval_waiting) _NOP(); //等待模接收完"+CCLK:"后面的字符
break;
}
}
UART0_RX_BUF[UART0_RX_MAXLen-1]=0x00;
if(date_p=strstr(UART0_RX_BUF,"+CCLK:"))
{
GSM_Retry_Time=0;
date_p=strstr(date_p,"\""); //找到双引号:”(引号内有引号需转译\)
Gottime=1;
//返回 +CCLK: "10/10/10,00:05:23+00"
date_p++;
//字符转换成十进制数值
yy=(*date_p-'0')*10+(*(date_p+1)-'0');
date_p=date_p+3;//指针向后移动3位
MM=((*date_p-'0')*10)+(*(date_p+1)-'0');
date_p=date_p+3;//指针向后移动3位
dd=((*date_p-'0')*10)+(*(date_p+1)-'0');
date_p=date_p+3;//指针向后移动3位
hh=((*date_p-'0')*10)+(*(date_p+1)-'0');
date_p=date_p+3;//指针向后移动3位
mm=((*date_p-'0')*10)+(*(date_p+1)-'0');
date_p=date_p+3;//指针向后移动3位
ss=((*date_p-'0')*10)+(*(date_p+1)-'0');
}
else
{
if((GSM_Retry_Time++) >=3) GSM_Reset();
}
}
unsigned char yy_char[1]={0},MM_char[1]={0},dd_char[1]={0},hh_char[1]={0},mm_char[1]={0},ss_char[1]={0};
dec_to_bcd(yy,yy_char,1);
yy=yy_char[0]+0x2000;
dec_to_bcd(MM,MM_char,1);
MM=MM_char[0];
dec_to_bcd(dd,dd_char,1);
dd=dd_char[0];
dec_to_bcd(mm,mm_char,1);
mm=mm_char[0];
dec_to_bcd(hh,hh_char,1);
hh=hh_char[0];
dec_to_bcd(ss,ss_char,1);
ss=ss_char[0];
Set_system_time(yy,MM,dd,hh,mm,ss);
for(;RTCCTL01&RTCRDY;) _NOP();
[解决办法]
是不是有递归?
[解决办法]
中的某个函数,也能避免这个问题,难道main里面不能放太多的函数??
这个是不会存在的,main里,甚至可以放全部的功能代码
何止这点函数调用
函数调用层数,还有不可重入函数的递归或多处同时调用。