-
- Сигнал называется "heartbeat". Означает "пациент скорее жив, чем
мёртв". - SciFi(07.04.2025 21:11)
- Хорошее название, использую в будущем. - Mty1(08.04.2025 09:34)
- Стандартное, в общем-то. В CANopen, в частности, есть. - Nikolay_Po(08.04.2025 11:16)
- Хорошее название, использую в будущем. - Mty1(08.04.2025 09:34)
- Вопрос сходу: для чего именно используется в схеме сигнал ALIVE и
зачем нужна такая высокая частота этого сигнала? В наших системах
WatchDog, управляющий питанием, имеет времена порядка единицы секунд. Там и 20Гц для сигнала LIVE вполне допустимо. reZident(366 знак., 07.04.2025 14:40)
- Там аппаратная защита так устроена. Время срабатывания малое. Это данность. Mty1(227 знак., 07.04.2025 15:13)
- какой тут плюрализм мнений ))) добавим спорного... POV(2 знак., 07.04.2025 12:37, картинка, картинка)
- интересно, спасибо. - Mty1(07.04.2025 12:40)
- Ни в коем случае не дёргать ношку аппаратно и в прерывании. Эта
тема обсасывалась 100500 раз. На все актуальные задачи нужэн свой
флаг, который устанавливается при нормальном прохождении.
Задача-анализатор, смотрит на флаги и если всё норм, сбрасывает их
и дёргает ношкой. - mse homjak(07.04.2025 12:55)
- Интересный алгоритм, спасибо, подумаю. - Mty1(07.04.2025 15:14)
- А почему нельзя/не рекомендуется проверку делать в обработчике
прерывания по таймеру-анализаторе, проверяющем/сбрасывающем флаги
задач? Из соображения, что если задачи выполняются корректно, то и
задачи-анализатора достаточно, и нечего тратить таймер? (т.е. если
задачи выполняются некорректно, то флаги один фиг не разрешают
дергать ногой). - pavel2000(07.04.2025 14:02)
- Имелось ввиду, что по таймеру просто говорить "ОК" нельзя, не
проверив флаги. С другой стороны, по таймеру лучше оповещать о
готовности, чтобы временная перегрузка не сбила такт сигнала и не
привела к аварийной остановке, в то время как все задачи, всё-таки,
успевали выполняться. - Nikolay_Po(07.04.2025 15:24)
- Спасибо, это ясная и прозрачная формулировка принципа. А можно еще
пояснить на примере - как в задачах ставить флаг корректного
выполнения? Еcли она крутит цикл с vTaskDelay(1) а прерывание
таймера скажем 5кгц, то в задаче ставим типа такого - Mty1(164 знак., 07.04.2025 21:06)
- Вроде того. У разных задач может быть разный период обнаружения отказа. Nikolay_Po(499 знак., 07.04.2025 23:29)
- Спасибо, это ясная и прозрачная формулировка принципа. А можно еще
пояснить на примере - как в задачах ставить флаг корректного
выполнения? Еcли она крутит цикл с vTaskDelay(1) а прерывание
таймера скажем 5кгц, то в задаче ставим типа такого - Mty1(164 знак., 07.04.2025 21:06)
- Имелось ввиду, что по таймеру просто говорить "ОК" нельзя, не
проверив флаги. С другой стороны, по таймеру лучше оповещать о
готовности, чтобы временная перегрузка не сбила такт сигнала и не
привела к аварийной остановке, в то время как все задачи, всё-таки,
успевали выполняться. - Nikolay_Po(07.04.2025 15:24)
- Ни в коем случае не дёргать ношку аппаратно и в прерывании. Эта
тема обсасывалась 100500 раз. На все актуальные задачи нужэн свой
флаг, который устанавливается при нормальном прохождении.
Задача-анализатор, смотрит на флаги и если всё норм, сбрасывает их
и дёргает ношкой. - mse homjak(07.04.2025 12:55)
- интересно, спасибо. - Mty1(07.04.2025 12:40)
- не верно. klen(153 знак., 07.04.2025 00:18)
- +1 Только вместо yeld() надо поставить sleep(1ms) - il-2(07.04.2025 06:13)
- Благодарю. По поводу yeld(); - нашел TaskYeld? это не оно? Mty1(488 знак., 07.04.2025 00:40, ссылка)
- Как верно отметил il-2 не taskYIELD(), а vTaskDelay(1). YIELD при
высоком приоритете alive_task приведет к передаче контекста самой
себе. taskYIELD уместен для передачи управления задачам с
одинаковым приоритетом. - abivan(07.04.2025 10:10)
- Да, получится по taskYIELD() если задача с высоким приоритетом, крутится будет только она как я понял. - Mty1(07.04.2025 12:35)
- по условию не реже, а так - как бы наоборот - Vit(07.04.2025 10:21)
- тогда пусть на таймерных прерываниях делает. Если надо то семафор
устанавливает, а в задаче с высоким приоритетом ждет этот семафор
если надо. - abivan(07.04.2025 10:55)
- Интересная идея. а при таком раскладе приооритетная задача может получать управление даже чаще 1мс? я прав? Действительно сделать из таймерного прерывания task notify - Mty1(07.04.2025 12:41)
- а зачем? эта задача по идее примерно такая же, что и Idle - у неё
по логике должен быть самый низкий приоритет (если нет Idle). и
решение от klen, КМК, самое то - Vit(07.04.2025 11:58)
- Так у klen решение - дать задаче самый высокий приоритет. И
возвращаять управление только ей. - Mty1(07.04.2025 12:38)
- ааа, не дочитал. считаю, что нужно именно самый низкий, но нутрянка та - Vit(07.04.2025 14:21)
- Что бы в случае если какая-то другая задача займет несколько мс
непрерывно, эта задача все равно выдавала сигнал с интервалом 1мс. - AlexBi(07.04.2025 12:03)
- кажется допёр. типа сторож, но для галочки. одни эпитеты - Vit(07.04.2025 14:27)
- Господа, вы звери :) Сделайте delay(1ms) и проверяйте что задержка
не больше двух. - Cкpипaч(07.04.2025 12:49)
- Если в системе 5 задач, и они будут нагружены, то задержка будет
5мс. Очень сильная зависимость от нагрузки и числа задач. - Mty1(07.04.2025 19:57)
- Речь о корпоративке? Значит нужно резать задачи на части
принудительно. При помощи sleep(0). Cкpипaч(174 знак., 08.04.2025 10:13)
- Да. согласен, все верно. FreeRTOS по умолчанию вытесняющая. Более приоритетная задача отнимет процессор. А если есть менее приоритетные - они будут ждать, пока все более приоритетные перейдут в блокировку. А freertos может быть и кооперативной и вытесняющей - прописывается в конфиге. - Mty1(08.04.2025 19:12)
- А если в системе 500 задач, то задержка будет 500 мс? - Michael75(07.04.2025 20:09)
- Речь о корпоративке? Значит нужно резать задачи на части
принудительно. При помощи sleep(0). Cкpипaч(174 знак., 08.04.2025 10:13)
- Если в системе 5 задач, и они будут нагружены, то задержка будет
5мс. Очень сильная зависимость от нагрузки и числа задач. - Mty1(07.04.2025 19:57)
- Так у klen решение - дать задаче самый высокий приоритет. И
возвращаять управление только ей. - Mty1(07.04.2025 12:38)
- тогда пусть на таймерных прерываниях делает. Если надо то семафор
устанавливает, а в задаче с высоким приоритетом ждет этот семафор
если надо. - abivan(07.04.2025 10:55)
- Как верно отметил il-2 не taskYIELD(), а vTaskDelay(1). YIELD при
высоком приоритете alive_task приведет к передаче контекста самой
себе. taskYIELD уместен для передачи управления задачам с
одинаковым приоритетом. - abivan(07.04.2025 10:10)
- Сигнал называется "heartbeat". Означает "пациент скорее жив, чем
мёртв". - SciFi(07.04.2025 21:11)