我有几个RTOS(pSOS,VxWorks,QNX)的经验,但我是MicroC / OS II(ucos ii)的新手。我看到ucos ii的独特之处在于它没有为任务使用唯一ID,而是使用优先级来唯一标识任务,并且所有任务必须处于不同的优先级,因此不支持循环调度。我明白了。这是个问题:
如果我使用OSTaskChangePrio()更改任务的优先级,则不会导致存储刚更改其优先级的任务的优先级(任务ID)的任何代码或其他任务出现问题。实际上,更改优先级会更改任务的标识。这怎么不是问题?
答案 0 :(得分:0)
该函数检查某个具有请求优先级/ ID的任务是否已存在,如果是,则返回错误。因此,如果您想要更改任务的优先级,您应在任务表中留下适当的位置。 ucosii最多可以管理255个任务,但在每个项目中,您都应指定OS_LOWEST_PRIO值。这样就可以限制可用任务的数量。 ucosii不像psos或vxworks - 它更像是nucleus或threadx - 非常薄的操作系统。
答案 1 :(得分:0)
除非您正在实施类似动态调度算法的内容,或者可能是RTOS的资源分配算法,否则您不希望更改任务的优先级。在这种情况下,人们并不关心任务的身份作为优先事项。根据任务的截止日期等因素,人们只关心此时需要执行哪项任务。
你是对的。如果您使用OSTaskChangePrio,则无法再根据任务优先级识别任务。