软复位,堆栈溢出?

[复制链接]
3222|5
 楼主| 457878 发表于 2012-4-24 09:33 | 显示全部楼层 |阅读模式
本帖最后由 457878 于 2012-4-24 09:58 编辑

下面这个,多复位几次堆栈就溢出了。怎么处理?


  1. #include<pic.h>
  2. #include<math.h>
  3. __CONFIG(0x3FD4);

  4. void SoftReset(void)
  5. { PCLATH = 0;
  6. asm("GOTO 0x00");
  7. }
  8. double tmp1,tmp2,tmp3,tmp4;
  9. void main(void)
  10. {
  11. NOP();
  12. NOP();
  13. while(1)
  14. {
  15.   tmp1 = sqrt(10000);
  16.   tmp2 = sin(10000);
  17.   tmp3 = cos(10000);
  18.   tmp4 = tan(10000);
  19.   NOP();
  20.   if(tmp1 == tmp2 == tmp3 == tmp4)
  21.   {
  22.    NOP();
  23.   }
  24.   NOP();
  25.   NOP();
  26.   SoftReset();
  27.   NOP();
  28.   NOP();
  29.   NOP();
  30. }
  31. }

kvdong 发表于 2012-4-24 10:03 | 显示全部楼层
程序有问题啊。。。。。。
C里面最好不要用goto
如果非得用的话也要在程序内跳转。
你的情况应该是不停的递归调用了
 楼主| 457878 发表于 2012-4-24 10:08 | 显示全部楼层
我也不想goto啊,如果只能函数内跳转,怎么实现软复位呢?
kvdong 发表于 2012-4-24 10:18 | 显示全部楼层
我也不想goto啊,如果只能函数内跳转,怎么实现软复位呢?
457878 发表于 2012-4-24 10:08


如果你非要用goto的话,那就在main里边用好了,这样不也算是函数内跳转吗
kvdong 发表于 2012-4-24 10:20 | 显示全部楼层
#include<pic.h>

#include<math.h>

__CONFIG(0x3FD4);



void SoftReset(void)

{
}

double tmp1,tmp2,tmp3,tmp4;

void main(void)

{
lable1:

NOP();

NOP();

while(1)

{

  tmp1 = sqrt(10000);

  tmp2 = sin(10000);

  tmp3 = cos(10000);

  tmp4 = tan(10000);

  NOP();

  if(tmp1 == tmp2 == tmp3 == tmp4)

  {

   NOP();

  }

  NOP();

  NOP();

  //SoftReset();

  NOP();

  NOP();

  NOP();
break;
}
PCLATH = 0;

goto lable1

}


改成这样试试
 楼主| 457878 发表于 2012-4-24 10:42 | 显示全部楼层
我怎么没想到,:victory:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部