2016-07-01 11 views
0

У меня есть опыт работы с несколькими RTOS (pSOS, VxWorks, QNX), однако я новичок в MicroC/OS II (ucos ii). Я вижу, что что-то уникальное в ucos ii вместо того, чтобы иметь уникальный идентификатор для задач, он использует приоритет для уникальной идентификации задач и что все задачи должны быть с разными приоритетами, и поэтому циклическое планирование ролей не поддерживается. Я так понимаю. Возникает вопрос:Изменение приоритета в MicroC/OS II (ucos ii) Изменение идентификатора задачи?

Если я изменяю приоритет задачи с помощью OSTaskChangePrio(), это не вызывает проблем для любого кода или других задач, которые сохранили приоритет (идентификатор задачи) задачи, которая только что изменила свой приоритет. Фактически изменение приоритета изменяет идентичность задачи. Как это не проблема?

ответ

0

Эта функция проверяет, существует ли какая-либо задача с запрошенным приоритетом/идентификатором, и если да, то она возвращает ошибку. Поэтому в случае, когда вы хотите изменить приоритет своей задачи, вы должны оставить соответствующее место в таблице задач. ucosii может управлять до 255 задач, но в каждом проекте вы должны указать значение OS_LOWEST_PRIO. Таким образом вы ограничите количество доступных задач. ucosii не похож на psos или vxworks - это больше похоже на ядро ​​или threadx - очень тонкая ОС.

0

Вы не хотите изменять приоритет своих задач, если вы не реализуете что-то вроде динамического алгоритма планирования или не можете использовать алгоритм выделения ресурсов для вашей ОСРВ. В таких случаях не обязательно, чтобы личность задачи была приоритетной. Оставалось только заботиться о том, какая задача должна выполняться в данный момент на основе таких факторов, как срок выполнения задачи.

Вы правы. Если вы используете OSTaskChangePrio, вы больше не сможете определять задачи, основанные только на приоритете задачи.

+0

Как раз один пример, я могу захотеть, чтобы задача, запускающая другие задачи, уменьшала ее приоритет, когда это было сделано. Разрешение задачи эффективно изменять свой идентификатор задачи означает, что я не могу зависеть от использования этого как способа идентификации задачи. Я также обнаружил, что неясно, когда ucos ii делает инверсию приоритета, действительно ли она изменяет идентификатор задачи (приоритет), как видно из других задач. То есть, если я пытаюсь использовать исходный идентификатор задачи (приоритет), в то время как происходит инверсия приоритета, чтобы идентифицировать, что задача вызывает вызов ОС, поскольку в этот момент ни одна задача не имеет идентификатор задачи (приоритет)? – JonN