打印

堆栈溢出问题

[复制链接]
1279|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-4-25 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, se, ST, TE, UART
刚刚把程序下载进去,还没有运行,就提示堆栈溢出了: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();

相关帖子

沙发
pkat| | 2012-4-25 21:11 | 只看该作者
没看太明白

使用特权

评论回复
板凳
firstblood| | 2012-5-8 14:41 | 只看该作者
程序代码的没看的撒明白,但从我的经验看下你代码中的局部变量,特别是数组的使用情况

使用特权

评论回复
地板
yuzhuixin| | 2012-6-10 11:59 | 只看该作者
不知道楼主的问题解决没。
首先我是菜鸟,不一定能解决楼主的问题。只是看了你的问题,想到了曾玩一个MSP430时碰到的类似问题。供参考。具体见“http://bbs.lierda.com/showthread.php?t=130659
问:“在程序仿真过程中,发现利尔达CC430开发套件(ez430-RF5137-433)所附带的无线收发的演示程序会出现“The stack 'stack' is filled t0 100%(80 bytes used out of 80),the warning threshold is set to 90%"的异常提示。此时的MCU虽然貌似工作正常。实际上会不停的重新复位启动。请问版主可有发现此问题?怎么解决呢?在编译选项中把上述的80改为200,问题依然。”
答:“你的仿真器是否为v5.10版本?如果是,在C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\430\config目录下将文件CC430F5137.ddf的:“Memory1 = RAM Memory 0x1C00 0x23FF RW”
修改为“ Memory1 = RAM Memory 0x1C00 0x2BFF RW”不停复位,是因为仿真堆栈溢出
又答:“cc430F5137 的RAM 空间范围0x1C00 ---0x2BFF(4K) ,而仿真文件CC430F5137.ddf将RAM误写为0x1C00 ---0x23FF(2K),既编译时使用4K RAM,而仿真时使用2K RAM,所以出错,是IAR的错误””

使用特权

评论回复
5
shenmu2012| | 2012-6-10 21:49 | 只看该作者
楼主也可检查下硬件的问题啊,若遇到虚焊啥的也会出现这种现象的

使用特权

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

本版积分规则

239

主题

2284

帖子

0

粉丝