реклама на сайте
подробности

 
 
> Как использовать Watchdog-таймер в RTOS, Ведь для многопоточных задач есть специфика
Дон Амброзио
сообщение Feb 11 2008, 18:10
Сообщение #1


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Как использовать Watchdog-таймер в вытесняющей RTOS? Ведь там трудно просчитать в какой момент какой сегмент кода будет работать. Всё зависит от потока событий


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Cosmojam
сообщение Feb 5 2012, 17:52
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Сории за некропостинг, не хочу плодить новых тем

Насколько правильно кормить (или всё же пинать?) дога в idle task ? По идее если всё работает исправно, то никакой процесс (процессы) не займёт процессор настолько долго чтобы idle не был вызван в течение таймаута вотчдога, а если это произошло - значит что-то не так


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 5 2012, 18:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Cosmojam @ Feb 5 2012, 19:52) *
кормить (или всё же пинать?)

Пожалуй, правильно кормить.
Пинать он сам будет, если не покормить.


Цитата(Cosmojam @ Feb 5 2012, 19:52) *
кормить (или всё же пинать?) дога в idle task ?

Имхо, правильней в прерывании, работающем с высокой частотой.
На не тупо watchdog_reset(), что нынче с watchdog-ами с оконным режимом бессмысленно, а по критериям/флагам зависящим от конкретной программы. Или в процессе с высоким приоритетом (если можно гарантировать регулярность активизации процесса).
Сброс в IdleTask, выходит что - совершенно не правильный метод, который иногда пригоден (например в megaavr, где собака примитивная), но в общем случает совершенно нельзя предсказать когда IdleTask получит управление и как регулярно он будет его получать(если программа не представляет собой моргание светодиодом в одном-двух процессах).

IdleTask больше подходит для организации энергосбережения:
Код
volatile unsigned char SleepEnabled=0;
void OS::IdleProcessUserHook()
{
        cli();
        unsigned char sleep_enabled=SleepEnabled;
        sei();
        if (sleep_enabled) {
            sleep_enable();
            sleep_cpu();
        }
}


B то глубокий sleep так не организовать (или можно? зависит от цпу), нужно сильней изголятся.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016