|
可以定义一组变量 a[3]为非初始化变量,程序起始处判断是否为设定的值,如是则为外部复位,不是则为上电复位。曾经用过,很可靠。如下面的例子:
no_init int po[3];
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if((po[0]==0x55)&(po[1]==0xaa)&(po[2]==0x55))
//外部复位
else //上电复位
a[0]=0x55;
a[1]=0xaa;
a[2]=0x55;
}
理由是外部复位(不掉电,ram内容不丢失)不会初始化a[],其内容为a[]={0x55,0xaa,0x55}。上电复位ram内容是随机的,由此可以区分。
需要在xcl文件中加入非初始化变量的定义:
-Z(DATA)NO_INIT=xxxx-xxxx |
|