Цитата(Dog Pawlowa @ Jan 31 2016, 01:57)
Возможно - что?
Кажется, вы каких-то чудес хотите - чтобы переменная не инициализировалась, но чтобы в ней не было рандомного значения.
"Горячий лед", "сухая вода" ?
Вы видимо не правильно поняли.
1) Включение МК по питанию(сигнал POR и PUC)
2) Сброс МК по WatchDog(только сигнал PUC). Программа начинает выполняться с начала, но есть бит, который указывает, что мы сбросились именно по WatchDog.
Код
if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке
{
IFG1&=~WDTIFG;//обнуляем флаг
countWatchDog++;
}
Поставлю вопрос тогда так. Где и как мне объявить переменную countWatchDog, чтобы:
1) Если включились по питанию, countWatchDog=0;
2) Если сброс по WatchDog, то countWatchDog++;
По сути нужно посчитать кол-во сбросов по WatchDog.
Пробовал:
Объявлял переменную за функцией main по-разному:
Код
int countWatchDog;
static int countWatchDog;
При этом main выглядит примерно так:
Код
int main(void)
{
/*настройка сторожевого таймера*/
WDTCTL = WDTPW // ключ защиты
+ WDTCNTCL // Обнуляем таймер
+ WDTSSEL; // 0 - тактовый сигнал от SMCLK, 1 - ACLK
IE1 = WDTIE;// разрешаем прерывания от сторожевого таймера
BCSCTL3 = LFXT1S_2;//задаем для ACLK источник тактирования VLO
if((IFG1&WDTIFG)!=WDTIFG)//по питанию
{
countWatchDog=0;
}
if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке
{
IFG1&=~WDTIFG;//обнуляем флаг
countWatchDog++;
}
}
При этом в случае, когда "int countWatchDog;" переменная всегда = 0
В случае, когда "static int countWatchDog;" переменная всегда равна 0х261. И в отладчике, после прохождения строчки "countWatchDog=0;" - значение переменной не меняется.