微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 程序总是自动重新执行,怎么回事?

程序总是自动重新执行,怎么回事?

时间:10-02 整理:3721RD 点击:
用的2407,主程序如下:
main()
{
disable();
initial();
pwm_initial();
calu();
enable();
*EVAIMRA=*EVAIMRA | 0X0200; /*使能定时器1下溢中断*/
*T1CON=*T1CON|0X0040; /*开启定时器1*/
while(1)
{
asm(\"nop\"

; /*等待TIMER1下溢中断*/
}
}
硬件仿真时发现,程序只要一运行到calu()中的Ua、Ub处时,就又自动开始重头运行,calu()子程序如下,INITIAL和agg_add都是在程序开头#define了
#define ang_add 2*3.1415926/200
#define INITIAL 0
void calu()
{
int i;
for(i=0;i<200;i++)
{
Ua=m*cos(INITIAL+i*ang_add);
Ub=m*sin(INITIAL+i*ang_add);
}
}
是不是我的写法有问题啊?我在initial()中已经将看门狗用下面语句屏蔽了,应该不是看门狗的问题吧。baidu、goole了下,也没找到好的解决办法,请大侠们赐教。
*WDCR=0X06F; /*禁止看门狗*/

那个子程序应该没有问题,建议看看前面的初始化设置部分吧。

1 想办法先 排除掉看门狗的问题,可以把函数包括中断都置为空操作,不作任何实质性工作
2 如果确定不是看门狗的问题,看看有没有破坏堆栈的地方(NULL指针、未初始化指针、数组越界、释放后又继续使用的指针等),比如Ua、 Ub是否越界

注意软堆栈的设置!
最好自己也定义一个_c_init
可能会有用!

我已经加大了,原来是100,现在改成256,还是有问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top