-
- +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)