打印

软复位,堆栈溢出?

[复制链接]
2294|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2012-4-24 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 457878 于 2012-4-24 09:58 编辑

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

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

void SoftReset(void)
{ PCLATH = 0;
asm("GOTO 0x00");
}
double tmp1,tmp2,tmp3,tmp4;
void main(void)
{
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();
}
}

沙发
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里边用好了,这样不也算是函数内跳转吗

使用特权

评论回复
5
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

}


改成这样试试

使用特权

评论回复
6
457878|  楼主 | 2012-4-24 10:42 | 只看该作者
我怎么没想到,:victory:

使用特权

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

本版积分规则

268

主题

876

帖子

3

粉丝