Forth http://www.fforum.winglion.ru/ |
|
вариант реализации watchdog механизма http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2681 |
Страница 2 из 2 |
Автор: | mOleg [ Вс ноя 14, 2010 19:50 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
Хищник писал(а): Я не вижу существенных причин, по которым ожидание готовности должно занимать строго определенное время в абсолютных единицах. Ну, тут просто, тактовая разной может быть, а мне надо с внешними событиями работать (именно по ним таймаут важен), которые не привязаны к тактам процессора. Зато временные параметры вполне определены. Хищник писал(а): Если уж так надо, по тому же интерфейсу, что и датчик, можно подключить часы реального времени. Да, можно, а еще можно суперкомпьютер рядом пристроить или атомный стандарт. Просто приведенное решение в моем конкретном случае меня устраивает, вот обобщить бы его и для других случев (которые в моей практике встречались) - это то, чего хочется (потому что подобные задачки будут возникать и в дальнейшем). Хищник писал(а): Если есть жесткое требование по таймауту, и при этом штатные средства PC не способны обеспечить его измерение... способны, код рабочий приведен. Он только одноразовый, т.е. его можно использовать только в одном месте (не может быть вложений, хотя последовательные отслеживания возможны). dynamic-wind писал(а): Ну как это во всём мире делают? Обработчик сигнала (SIGALRM) от системного таймера выставляет флажок в структуре программного таймера. Если есть еще программные таймеры, обработчик сигнала переустанавливает системный таймер (setitimer) для следующего срабатывания. А в цикле стоит просто проверка, взведен ли флажок в данном программном таймере. да, логично, однако в таком случае флажек должен располагаться в пользовательской памяти, т.е. быть USER переменной, а я не представляю, как определить этот адрес из callback штатными средствами, иначе получается та же проблема: код не универсален, применение ограничено. Ладно, что нибудь придумаю (тут важно отложить проблему на время, чтобы потом посмотреть на нее свежим взглядом. То, что есть пока устраивает.) |
Автор: | Гость [ Вс ноя 14, 2010 23:30 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
Цитата: dynamic-wind писал(а): А в цикле стоит просто проверка, взведен ли флажок в данном программном таймере. да, логично, однако в таком случае флажек должен располагаться в пользовательской памяти, т.е. быть USER переменной |
Автор: | _Harry [ Вс ноя 14, 2010 23:31 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
mOleg писал(а): да, логично, однако в таком случае флажек должен располагаться в пользовательской памяти, т.е. быть USER От строго наоборот флаг должен быть видим глобально. Вообще то это все очень просто делается. Непонятки возникают из за того, что то что ты описываешь это в общем то не wathdog. |
Автор: | mOleg [ Вт мар 01, 2011 20:26 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
вобщем, вот последний вариант обсуждаемого source file: watchdog.fts |
Автор: | dynamic-wind [ Ср мар 02, 2011 10:35 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
А я что-то не понимаю, DOG: создает структуру из 4-х слов в хипе, причем последнее слово ссылается на 2 слова в какой-то "юзерской области"? Если таймер нужен локально (временно) внутри рекурсивно вызываемого слова, как такое сделать? |
Автор: | mOleg [ Ср мар 02, 2011 17:24 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
dynamic-wind писал(а): DOG: создает структуру из 4-х слов в хипе, причем последнее слово ссылается на 2 слова в какой-то "юзерской области"? в хипе ничего не создается. Создается определение с тремя полями кода, по устройству похожее на USER-VALUE переменную). Слово DOG: создает имя, которое при прямом вызове запоминает необходимое значение интервала и адрес обработчика этого самого превышения; при использовании совместно с TO позволяет изменить интервал (ну например в начале цикла чего-нибудь, за чем надо следить можно устанавливать интервал превышения), а совместно со словом WATCH проверяет нужно ли вызвать обработчик (ранее заданный). Вобщем примерно так: DOG: опоздание dynamic-wind писал(а): причем последнее слово ссылается на 2 слова в какой-то "юзерской области"? пользовательская область - это личная память данных потока. В среде виндовс многозадачность форта в чем-то похожа на времена ДОСа, когда есть общее хранилище кода и данных, доступное из всех потоков, соответственно в нем все переменные глобальны, и изменение одной из них отразится на других потоках. Кроме того у каждого потока есть интимная, так сказать, область памяти, где любые изменения видны только одному конкретному потоку. Так вот, один и тот же таймер может иметь собственные настройки в каждом потоке, а два слова (точнее две ячейки памяти) - это адрес обработчика и временной лимит. dynamic-wind писал(а): Если таймер нужен локально (временно) внутри рекурсивно вызываемого слова, как такое сделать? можно и такое сделать, собственно так были сделан предыдущий вариант |
Автор: | dynamic-wind [ Ср мар 02, 2011 18:06 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
mOleg писал(а): dynamic-wind писал(а): DOG: создает структуру из 4-х слов в хипе, причем последнее слово ссылается на 2 слова в какой-то "юзерской области"? в хипе ничего не создается. Создается определение с тремя полями кода, по устройству похожее на USER-VALUE переменную). Да, я так и понял. По привычке называю словарную область хипом. mOleg писал(а): dynamic-wind писал(а): Если таймер нужен локально (временно) внутри рекурсивно вызываемого слова, как такое сделать? можно и такое сделать, собственно так были сделан предыдущий вариант Но там всё равно таймер выделялся внутри словаря, статически. Даже когда он не используется, он занимает место. Мелочь, а неприятно. Я избалован SML/NJ с его быстрым динамическим аллокатором. |
Автор: | mOleg [ Ср мар 02, 2011 18:32 ] |
Заголовок сообщения: | Re: вариант реализации watchdog механизма |
dynamic-wind писал(а): Но там всё равно таймер выделялся внутри словаря, статически. Даже когда он не используется, он занимает место. Мелочь, а неприятно. дык, можно и не выделять-то. Просто сложнее будет место для таймера найти, точнее, можно, к примеру, значение таймаута и обработчик выкинуть на стек возвратов, но тогда придется пользоваться таким механизмом более осторожно, только в рамках одного определения, что не проблема вобщем-то, но все же не всегда хорошо. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |