|
1、我是在UART0中断函数里退出LPM1的。在UART0中执行了LPM1_EXIT语句后程序从中断返回,执行mian()中while(1)循环体中“LPM1”后面的语句“Command_identify();”。执行该语句调用的程序时,最多有4层函数调用。其中包括通过UART0回发应答数据帧。在完成UART0回发应答数据帧后逐层返回,当返回到最后一层时,即返回到调用“Command_identify();”处时,PC指针却指向到while(1)循环体外面,即while(1)语句前面的某条语句上!使得程序重新进入while(1)循环,并又一次进入LPM1低功耗,并等待UART0的再次中断。在次期间同时还有一个TA0的0.5s中断,对LCD进行时钟刷新。
/*---------主循环 ----------------*/
while (1)
{
LPM1; // 进入低功耗模式1(LPM1=ACLK、SMCLK活动)
_NOP(); // Required only for C-spy
if (RxEND == 1)
{
Command_identify(); // 若数据帧接收完成,则调用命令识别
RxBUF_i = 0;
RX_Star = 0;
}
}
}
2、上电或复位后UART0可以正确的完成一次数据收发操作。
但是,从断点设置后单步跟踪的观察,在完成操作后就不能正确返回到调用处,所以有些程序标志没有复位,因此不能正确执行新的命令了。
3、IAR EW 3.10A是破解版,并打了补丁。
lsdfae06版主,能否做进一步解答,谢谢!! |
|