首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

刚开机下载进去,堆栈就溢出了~不知道什么原因,该怎么解决

2012-05-22 
刚开机下载进去,堆栈就溢出了~不知道什么原因刚刚把程序下载进去,还没有运行,就提示堆栈溢出了:Wed Apr 25

刚开机下载进去,堆栈就溢出了~不知道什么原因

刚刚把程序下载进去,还没有运行,就提示堆栈溢出了: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里,甚至可以放全部的功能代码

何止这点函数调用

函数调用层数,还有不可重入函数的递归或多处同时调用。

热点排行