|
Сторожевой таймер!..., быть ему ...или не быть? |
|
|
|
Apr 18 2006, 09:16
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912

|
Здравствуйте! Два вопроса по сторожевому таймеру: 1. Обязательным (или желательным) требованием при написании программы является включение этого таймера?.. и чем руководствоваться при расставлении #asm("wdr") в программе? расставлять так часто чтобы обнуление WDT происходило через промежутки времени ГАРАНТИРОВАНО меньшие чем время переполнения таймера WDT??? ...или, если я пользуюсь VMlab он советует, куда поставить команду сброса обращать внимание на его инструкции?? 2. Мне непонятен код, который генерирует CVAVR при включении в визарде сторожевого таймера что он означает? (строки с #) Код #pragma optsize- WDTCR=0x1D; WDTCR=0x0D; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif Спасибо...
Сообщение отредактировал MakFatum - Apr 18 2006, 09:17
|
|
|
|
|
 |
Ответов
|
Apr 18 2006, 19:21
|
Группа: Новичок
Сообщений: 5
Регистрация: 16-12-05
Пользователь №: 12 321

|
Это выдержка скопирована из FAQ от fido7.ru.embedded, ИМХО так и надо.
Вопрос: Как выбрать момент сброса WDT? Ответ: Обычно WDT требуют периода обращения к ним в течение 0,03-3 с. Причём внешние WDT имеют период более одной секунды. Встроенные в МК WDT могут настраиваться на различные периоды при помощи внутренних регистров контроллера. В общем случае, период сброса WDT должен всегда быть меньше его таймаута на генерацию сигнала "Сброс". Программа обычно состоит из процедур обработки прерываний и фоновой программы. Сбрасывать WDT в процедуре прерывания крайне не рекомендуется, поскольку вполне может случиться так, что основная программа по каким-то причинам перестала выполняться, а процедура прерывания (например, от внутреннего таймера) продолжает работать. Сброс WDT в процедуре прерывания можно сделать лишь в том случае, если время выполнения этой процедуры может превысить таймаут самого WDT. В этом случае перед сбросом WDT неплохо проверить флаги, контролирующие работу фоновой программы. Например, можно ввести счётчик, который будет уменьшаться в прерывании, и при достижении значения "0" WDT перестанет сбрасываться. Основная программа будет устанавливать этот счётчик как признак её работы. Но такая ситуация скорее исключение, чем правило. Обычно WDT сбрасывается в самом внешнем цикле программы (например, функция main(), если программа написана на языке Си). При необходимости перед сбросом WDT выполняется ряд контрольных проверок. Во многих системах в том или ином виде используется отсчёт реального времени. Для этой цели обычно используется один из внутренних таймеров МК, переполнение которого вызывает прерывание. Для контроля работоспособности таймера реального времени в основной программе перед сбросом WDT выполняется проверка флага, установленного в прерывании от таймера: disable_interrupt(); if (timer_int_flag) { timer_int_flag = 0; reset_wdt(); } enable_interrupt(); Если в системе используются другие циклические прерывания, то в проверку перед сбросом WDT можно внести и их флаги.
|
|
|
|
Сообщений в этой теме
MakFatum Сторожевой таймер!... Apr 18 2006, 09:16 ALexx Желательно, конечно, защититься от зависаний, кото... Apr 18 2006, 10:03 WHALE wdr лучше всего ставить в коде,вызываемом в цикле,... Apr 18 2006, 12:56 BVU Цитата(WHALE @ Apr 18 2006, 16:56) wdr лу... Apr 18 2006, 14:13 Proton В серийных устройствах надёжнее всего ставить внеш... Apr 19 2006, 03:35 defunct Цитата(Proton @ Apr 19 2006, 06:35) В сер... Apr 20 2006, 14:43 Kovrov А что такое внешний WDT?
если рассуждать лог-ки, ... Apr 19 2006, 06:02 iosifk Цитата(Kovrov @ Apr 19 2006, 10:02) А что... Apr 19 2006, 06:30 BVU Цитата(Kovrov @ Apr 19 2006, 10:02) А что... Apr 19 2006, 06:37 Igor26 Цитата(Kovrov @ Apr 19 2006, 10:02) А что... Apr 19 2006, 06:44 Rst7 Да вообщем, в приложениях, которые требуют хорошей... Apr 19 2006, 07:32 plan Цитата(Rst7 @ Apr 19 2006, 11:32) Да вооб... Apr 19 2006, 10:11  SasaVitebsk Цитата(plan @ Apr 19 2006, 14:11) Цитата(... Apr 22 2006, 20:38   plan Цитата(SasaVitebsk @ Apr 22 2006, 23:38) ... Apr 25 2006, 05:15    SasaVitebsk Цитата(plan @ Apr 25 2006, 08:15) Полност... Apr 25 2006, 18:49  tag Цитата(plan @ Apr 19 2006, 13:11) Цитата(... May 3 2006, 14:43   rezident Цитата(tag @ May 3 2006, 20:43) А что мож... May 3 2006, 15:43 _artem_ Кстати при тестировании этот таймер может вам боль... Apr 20 2006, 12:12 vet defunct
И всё же...
Бывают случаи - завис AVR, вкл... Apr 20 2006, 14:59 defunct Цитата(vet @ Apr 20 2006, 17:59) defunct
... Apr 20 2006, 15:09 Kovrov кстати если есть разница в поведении программы как... Apr 20 2006, 15:49 vaivai Я имею дело с сигнализациями (DSC,Spectra) - очень... Apr 22 2006, 18:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|