0

我有几个 RTOS(pSOS、VxWorks、QNX)的经验,但是我是 MicroC/OS II(ucos ii)的新手。我看到 ucos ii 的独特之处在于它使用优先级来唯一标识任务,并且所有任务都必须具有不同的优先级,因此不支持轮询调度,而不是具有唯一的任务 ID。我就这么理解。这是问题:

如果我使用 OSTaskChangePrio() 更改任务的优先级,这不会导致存储刚刚更改其优先级的任务的优先级(任务 ID)的任何代码或其他任务出现问题。实际上,更改优先级会更改任务的身份。这怎么不是问题?

4

2 回答 2

0

该函数检查是否已存在具有请求的优先级/ID 的任务,如果存在则返回错误。因此,如果您想更改任务的优先级,您应该在任务表中留下适当的位置。ucosii 最多可以管理 255 个任务,但在每个项目中您都应指定 OS_LOWEST_PRIO 值。通过这种方式,您可以限制可用任务的数量。ucosii 不像 psos 或 vxworks - 它更像是 nucleus 或 threadx - 非常薄的操作系统。

于 2016-08-04T14:04:18.787 回答
0

除非您正在实施诸如动态调度算法之类的东西,或者可能是您的 RTOS 的资源分配算法,否则您不会想要更改任务的优先级。在这种情况下,人们并不关心优先级任务的身份。根据任务的截止日期等因素,人们只会关心此时需要运行哪个任务。

你是对的。如果您确实使用了 OSTaskChangePrio,则无法再仅根据任务优先级来识别任务。

于 2016-09-21T10:14:11.740 回答