-
- а ничего что TN_INTERRUPT_LEVEL = 1 ? abivan(144 знак., 28.10.2014 16:14)
- И вообще приведенный пример с двумя задачами и одним семафором на мой взгляд не корректный. AlexBi(755 знак., 28.10.2014 18:51)
- Вы не до конца разобрались, как работает вытесняющая 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)
- Спасибо, переход на _T1IP=1; помог. Правда я так и не понял из-за чего это оказалось критичным. AlexBi(309 знак., 28.10.2014 16:39)
- Это было сделано для реализации быстрых и безопасных критических секций, которых полно внутри ядра. - Alex B.(28.10.2014 19:45)
- А вот кстати вопрос: есть какая-нибудь реальная мелкая RTOS без критических секций внутри ядра? Хотя бы для камней, имеющих соответствующие атомарные команды (Cortex-M3, RXv2, x86)? - lightelf(29.10.2014 17:26)
- Есть, например AVIX - Alex B.(06.11.2014 22:48, ссылка)
- Похоже оно самое. Жаль, без сорцов. Интересно было бы посмотреть реализацию. - lightelf(07.11.2014 12:14)
- Можно поднять эту тему. Прикрепленный там файл с косячком, могу выложить новый. --> - il-2(06.11.2014 17:12, ссылка)
- Есть, например AVIX - Alex B.(06.11.2014 22:48, ссылка)
- А вот кстати вопрос: есть какая-нибудь реальная мелкая RTOS без критических секций внутри ядра? Хотя бы для камней, имеющих соответствующие атомарные команды (Cortex-M3, RXv2, x86)? - lightelf(29.10.2014 17:26)
- Это было сделано для реализации быстрых и безопасных критических секций, которых полно внутри ядра. - Alex B.(28.10.2014 19:45)
- И вообще приведенный пример с двумя задачами и одним семафором на мой взгляд не корректный. AlexBi(755 знак., 28.10.2014 18:51)
- а ничего что TN_INTERRUPT_LEVEL = 1 ? abivan(144 знак., 28.10.2014 16:14)