Перейти к содержанию
    

всем привет,

 

Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Посредством WatchDog ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Завести Watchdog, и по необходимости "например, при проверке одного флага" уйти в бесконечный цикл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ззапретить прерывания, завести Watchdog на самую короткую продолжительность, и только после этого уйти в бесконечный цикл.

Например так:

void Reset()
{
  __disable_interrupt();
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = (1<<WDE);  // 16 ms
  for(;;);
}

(только это не для ATmega88pa писано).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под avr-gcc для любых AVR.

static inline void NORETURN mcu_reset(void)  {wdt_enable(WDTO_15MS); cli(); for(;;);}

Пора бы уже эту фишку в avr-libc реализовать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Соеденить какую-нибудь ногу GPIO с RESET, не?
Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени.

Ну, и здесь этот определенный момент также не очень-то определен, с учетом минимально допустимого времени сброса (2,5 мкс по даташиту), с учетом работы внутреннего счетчика задержки ресета, а также с учетом того, что при срабатывании ресета сигнал порта, вызывающего ресет, тоже сбрасывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, и здесь...
Согласен, все в мире относительно :) Просто в случае с WDT ко всем выше перечисленным задержкам прибавляется минимальное время реакции WDT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ram и все регитсры сбрасываются или сохраняются значения, при сбросе от WDT?
Сброс по WDT работает так же как и сброс от внешнего RESET. Все регистры и порты ВВ принимают начальное значение описаное в даташите на МК. SRAM не изменится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил

 

правильно я говорю?

И переменная сохранит свое значение до ресета?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил

 

правильно я говорю?

И переменная сохранит свое значение до ресета?

Ну да. А разве при инициализации программы у Вас флаги не устанавливаются в какое то дефолтное значение? Типа:

unsigned int g_Flag_1 = 0x0000;
unsigned int g_Flag_2 = DEF_FLAG_A | DEF_FLAG_B;


void main(void)
{ 
...
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил

правильно я говорю?

А обычно вы их сами обнуляете? Или в стартапе они обнуляются?

Сброс по WDT аналогичен обычному, то есть всё пойдёт по тому же сценарию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...