2016-07-01 2 views
0

J'ai de l'expérience avec plusieurs RTOS (pSOS, VxWorks, QNX) mais je suis nouveau sur MicroC/OS II (ucos ii). Je vois que quelque chose d'unique à propos d'ucos ii est d'avoir un ID unique pour les tâches, il utilise la priorité pour identifier les tâches de façon unique et que toutes les tâches doivent être à des priorités différentes et donc la planification round robin n'est pas supportée. Tant que je comprends. Voici la question:La modification de la priorité dans MicroC/OS II (ucos ii) modifie l'ID de tâche?

Si je change la priorité d'une tâche avec OSTaskChangePrio() cela ne cause pas de problèmes pour le code ou d'autres tâches qui ont stocké la priorité (ID de tâche) de la tâche qui vient de changer sa priorité. En effet, la modification de la priorité modifie l'identité de la tâche. Comment est-ce que ce n'est pas un problème?

Répondre

0

Cette fonction vérifie si une tâche avec une priorité/un ID demandé existe déjà et, le cas échéant, renvoie une erreur. Par conséquent, dans le cas où vous voulez changer la priorité de votre tâche, vous devez laisser une place appropriée dans la table des tâches. ucosii peut gérer jusqu'à 255 tâches, mais dans chaque projet, vous devez spécifier la valeur OS_LOWEST_PRIO. De cette façon, vous limitez le nombre de tâches disponibles. ucosii n'est pas comme psos ou vxworks - il ressemble plus à un noyau ou un threadx - un système d'exploitation très mince.

0

Vous ne voulez pas modifier la priorité de vos tâches à moins que vous n'implémentiez quelque chose comme un algorithme de planification dynamique ou que vous soyez un algorithme d'allocation de ressources pour votre RTOS. Dans de tels cas, on ne se soucie pas de l'identité de la tâche en tant que priorité. On se soucierait seulement de la tâche qui doit être exécutée en ce moment en fonction de facteurs tels que l'échéance de la tâche.

Vous avez raison. Si vous utilisez OSTaskChangePrio, vous ne pouvez plus identifier les tâches en fonction de la priorité de la tâche.

+0

Juste un exemple, je pourrais vouloir que la tâche qui démarre d'autres tâches réduise sa priorité quand c'est fait. Permettre à une tâche de changer efficacement son ID de tâche signifie que je ne peux pas dépendre de l'utiliser pour identifier la tâche. J'ai également trouvé qu'il n'était pas clair quand ucos ii fait l'inversion des priorités, cela change-t-il réellement l'identifiant de la tâche (priorité) vu par d'autres tâches. Si j'essaie d'utiliser l'ID de tâche d'origine (priorité) alors que l'inversion de priorité est en cours pour identifier cette tâche, l'appel du système d'exploitation échoue-t-il car aucune tâche n'a cet ID de tâche (priorité) à ce moment? – JonN