Установка максимального значения watchdog_set_period вызывает перезагрузку

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

Максимальное значение времени ожидания, определенное в одном из макросов, равно 55, и когда мы пытаемся установить это значение из функции watchdog_set_period, наша плата перезагружается.

#define Max_time_out 55

watchdog_set_period(int period) // Установить счетчик тайм-аута сторожевых таймеров

где период = 55

Теперь это что-то ожидается или как в чем причина перезагрузки

Мы записываем это значение периода в какой-то драйвер, к которому мы обращаемся через файловый дескриптор.


person Amit Singh Tomar    schedule 23.08.2013    source источник
comment
Прежде всего, вам нужно понять, что такое сторожевой таймер.   -  person Santhosh Pai    schedule 23.08.2013
comment
Вам необходимо периодически обновлять сторожевой таймер. В противном случае плата перезагружается по истечении сторожевого таймера.   -  person stev    schedule 23.08.2013
comment
@SanthoshPai Я согласился на этот пункт и, может быть, я кое-что узнаю здесь   -  person Amit Singh Tomar    schedule 23.08.2013
comment
сторожевой таймер — это специальный таймер, который можно использовать для обнаружения зависания на какой-либо задаче. Вы не можете использовать это как таймер общего назначения.   -  person Shihab    schedule 23.08.2013


Ответы (2)


ссылка содержит это описание. на сторожевых таймерах.

A watchdog timer is a piece of hardware that can be used to automatically detect software anomalies and reset the processor if any occur. Generally speaking, a watchdog timer is based on a counter that counts down from some initial value to zero. The embedded software selects the counter's initial value and periodically restarts it. If the counter ever reaches zero before the software restarts it, the software is presumed to be malfunctioning and the processor's reset signal is asserted. The processor (and the embedded software it's running) will be restarted as if a human operator had cycled the power.

Вы не опубликовали код, поэтому мы не можем судить, в чем именно проблема. Если вы написали код, проверьте, не вызывает ли ваш код какие-либо проблемы, вызывающие сброс сторожевого таймера.

person Santhosh Pai    schedule 23.08.2013

Сторожевой таймер — это особый тип таймера, обычно встречающийся во встроенных системах, который используется для обнаружения того, что запущенное программное обеспечение/микропрограмма зависает над какой-либо задачей. Сторожевой таймер — это, по сути, таймер обратного отсчета, который ведет отсчет от некоторого начального значения до нуля. При достижении нуля сторожевой таймер понимает, что система зависла, и сбрасывает его.

Следовательно, работающее программное обеспечение должно периодически обновлять сторожевой таймер (в бесконечном цикле while) новым значением, чтобы предотвратить его достижение нуля и сброс. Когда работающее программное обеспечение заблокировано при выполнении определенной задачи и не может обновить (обновить не удается) сторожевой таймер, таймер в конечном итоге достигнет нуля, и произойдет сброс / перезагрузка.

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

person stev    schedule 23.08.2013
comment
Я хочу сказать, что всякий раз, когда мы пытаемся установить счетчик времени ожидания сторожевых таймеров на значение 55, которое равно max_time_out, будет ли плата перезагружаться? - person Amit Singh Tomar; 23.08.2013
comment
@AmitSinghTomar: сторожевым таймерам всегда нужно, чтобы произошло какое-то событие, если не получает какое-либо событие от программного обеспечения, счетчик истечет время ожидания, что приведет к сбросу платы. - person Santhosh Pai; 23.08.2013
comment
Да, плата перезагрузится через 55 единиц времени (я предполагаю, что это миллисекунды). Предположим, у вас есть карта (которая выполняет некоторые встроенные системные функции) в слоте PCI или PCIe ПК. Если сторожевой таймер перезагрузит карту, вы даже можете связать сброс карты со сбросом ПК, чтобы перезагрузить ПК. Итак, как я уже говорил ранее, вы должны периодически обновлять сторожевой таймер после его включения. - person stev; 23.08.2013