-
- Вы не до конца разобрались, как работает вытесняющая RTOS. При установке семафора вызывается планировщик, который проверяет очередь задач, готовых к выполнению (ожидающих семафора). Если такая задача есть, планировщик передает ей управление. Alex B.(383 знак., 28.10.2014 19:49)
- Тогда получается, что приоритетов задач по сути нет? Любая задача, установившая семафор, будет вытеснена, если есть другая задача, ожидающая этот семафор, не зависимо от их приоритетов? И из очереди ожидающих задач так же будет выбрана первая AlexBi(36 знак., 29.10.2014 10:34)
- Если две задачи ожидают освобождение семафора, то управление будет передано той, которая имеет более высокий приоритет - Alex B.(29.10.2014 14:02)
- Но задача, установившая семафор, потеряет управление в момент установки семафора, независимо от соотношения ее приоритета с приоритетом ожидающих? - AlexBi(29.10.2014 17:55)
- Конечно, т.к. семафор используется для синхронизации между задачами. Если семафор ожидают две задачи, то управление будет передано той, которая имеет более высокий приоритет - Alex B.(06.11.2014 22:48 - 22:50)
- Нет, условия другие, задача с большим приоритетом выполняется и устанавливает семафор, который ожидает задача с меньшим приоритетом, но задача с большим приоритетом все равно теряет управление, не смотря на соотношение приоритетов, и запускается AlexBi(417 знак., 07.11.2014 10:44)
- Догадка верна. Я не понимаю, что вас смущает. Синхронизация между задачами важнее их приоритетов. Приоритеты задач вступают в силу, когда есть несколько задач в очереди готовых к выполнению. В противном случае у вас запустилась бы самая Alex B.(63 знак., 07.11.2014 13:55)
- синхронизация между задачами решается учётом инверсии приоритетов. этот учёт должен быть в коде переключателя задач. а самая приоритетная задача может заблокировать работу других, если ей нужно. на то она и самая приоритетная. - Mahagam(08.11.2014 12:19)
- Мне кажется приоритеты нужны. Например есть задача обработки пакета, принятого по СОМ-порту, и отправка ответа. Время уходящее на обработку 1-2мс. И есть задача обработки нажатия на кнопку, время ее работы может быть 50-100мс. Кажется логичным, AlexBi(554 знак., 07.11.2014 18:16)
- TNKernel здесь ни при чем, виноваты вот эти товарищи :-) -> il-2(506 знак., 25.12.2014 11:32, ссылка)
- Догадка верна. Я не понимаю, что вас смущает. Синхронизация между задачами важнее их приоритетов. Приоритеты задач вступают в силу, когда есть несколько задач в очереди готовых к выполнению. В противном случае у вас запустилась бы самая Alex B.(63 знак., 07.11.2014 13:55)
- Нет, условия другие, задача с большим приоритетом выполняется и устанавливает семафор, который ожидает задача с меньшим приоритетом, но задача с большим приоритетом все равно теряет управление, не смотря на соотношение приоритетов, и запускается AlexBi(417 знак., 07.11.2014 10:44)
- Конечно, т.к. семафор используется для синхронизации между задачами. Если семафор ожидают две задачи, то управление будет передано той, которая имеет более высокий приоритет - Alex B.(06.11.2014 22:48 - 22:50)
- Но задача, установившая семафор, потеряет управление в момент установки семафора, независимо от соотношения ее приоритета с приоритетом ожидающих? - AlexBi(29.10.2014 17:55)
- Если две задачи ожидают освобождение семафора, то управление будет передано той, которая имеет более высокий приоритет - Alex B.(29.10.2014 14:02)
- Тогда получается, что приоритетов задач по сути нет? Любая задача, установившая семафор, будет вытеснена, если есть другая задача, ожидающая этот семафор, не зависимо от их приоритетов? И из очереди ожидающих задач так же будет выбрана первая AlexBi(36 знак., 29.10.2014 10:34)
- Вы не до конца разобрались, как работает вытесняющая RTOS. При установке семафора вызывается планировщик, который проверяет очередь задач, готовых к выполнению (ожидающих семафора). Если такая задача есть, планировщик передает ей управление. Alex B.(383 знак., 28.10.2014 19:49)