This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
yannan fan,
我碰见时,是重新开一下IAR就好了,他其实是可以指示运行到哪的,只是显示有问题了。用的是哪个device?其他device也有一样的情况吗?如果也有的话,升级一下IAR再试试吧。
BR,
Lina
yannan fan,
看到图了,这个说明你的程序每次都停在了程序最开始的地方。程序中关看门狗了吗?是不是系统一直复位?
你之前说确定其执行了程序设置断点以下的地方,可否将程序贴出来看看?
BR,
Lina
VOID main (VOID)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitSys(); //wait osc,set clk
USARTConfig(); //USART Config
Init_Timer();
__bis_SR_register(GIE); //interrupts enabled
//__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, interrupts enabled
//__no_operation(); // For debugger
//SendUart(&a[0],10);//测试串口发送
while (1)
{ TaskHandle();//任务处理 } //while(1)
} //main()
在语句USARTConfig(); 前设置断点,调试程序会执行到 TaskHandle();,这个函数有个LED显示,说明程序已经执行了。而且我改变外部状态,不同的LED会亮。说明程序一直运行。
yannan fan,
建议你用下面这个简单的闪灯程序,设置个断点看看,可不可以在断点处停下来。断点就设在P1.0翻转这地。记得新建一个工程。
#include <msp430.h>
int main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop WDT
P1DIR |= BIT0; // P1.0 set as output
while(1) // continuous loop
{
P1OUT ^= BIT0; // XOR P1.0
for(i=50000;i>0;i--); // Delay
}
}
BR,
Lina
yannan fan,
按照提示,你的程序堆栈溢出了。
按照下列链接:http://blog.chinaunix.net/uid-9112803-id-3447923.html
看看程序究竟用了多大堆栈,然后更改堆栈的大小。
BR,
Lina
yannan fan,
还有另外一种更靠谱的方法,
你知道你的堆栈所处地址,在线调试状态下,stack全部填充固定值,例如0x55, 然后运行程序,直至出错,在看看此时stack值是否全部更改,如果全部更改,说明stack真的是设置小了。
BR,
Lina
VOID main (VOID)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitSys(); //wait osc,set clk
USARTConfig(); //USART Config
Init_Timer();
__bis_SR_register(GIE); //interrupts enabled
//__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, interrupts enabled
//__no_operation(); // For debugger
//SendUart(&a[0],10);//测试串口发送
while (1)
{ TaskHandle();//任务处理 } //while(1)
} //main()
发现了一个问题,我在之前的贴出的代码中,就一点屏蔽其中InitSys(); 函数中的俩句话
P8OUT &= ~BIT2; //AVDD EN
P8DIR |= BIT2;
这俩句话作用就是个外接模块的Power 开关,为什么这俩句会有怎么大影响。
屏蔽之后调试就正常了。
yannan fan,
SYSRSTIV = 2, 说明系统复位是由Brownout(BOR)引起的,正常上电后 powering up或上电后欠压复位均会导致SYSRSTIV值为2.
请问目前程序运行正常是什么意思?是没有之前一直停在程序开始的地方了?还是即使加上下面语句也执行正常了?
P8OUT &= ~BIT2; //AVDD EN
P8DIR |= BIT2;
查询SYSRSTIV是为了定位在调试状态下,程序不正常复位究竟是由何种原因导致的。
BR,
Lina