2016-07-01 8 views
0

私はいくつかのRTOS(pSOS、VxWorks、QNX)の経験がありますが、MicroC/OS II(ucos ii)は初めてです。私はucos iiのユニークなものが、タスクの一意のIDを持つのではなく、タスクを一意に識別するための優先順位を使用し、すべてのタスクが異なる優先順位でなければならないことを知っているため、ラウンドロビンスケジューリングはサポートされていません。それほど私は理解する。MicroC/OS II(ucos ii)の優先順位を変更するとタスクIDが変更されますか?

OSTaskChangePrio()でタスクの優先度を変更しても、コードや優先度を変更したタスクの優先度(タスクID)を格納していた他のタスクで問題が発生しません。事実上優先度を変更すると、タスクの識別情報が変更されます。どのようにこれは問題ではないですか?

答えて

0

この関数は、要求された優先度/ IDを持つタスクがすでに存在するかどうかをチェックし、存在する場合はエラーを返します。したがって、タスクの優先順位を変更したい場合は、タスクテーブルに適切な場所を残してください。 ucosiiは最大255のタスクを管理できますが、すべてのプロジェクトでOS_LOWEST_PRIO値を指定します。この方法では、使用可能なタスクの量を制限します。 ucosiiはpsosやvxworksのようなものではありません。これは核やスレッドXのようなものです。非常に薄いOSです。

0

動的スケジューリングアルゴリズムのようなものを実装している場合や、RTOSのリソース割り当てアルゴリズムでない場合は、タスクの優先度を変更したくない場合があります。このような場合、優先度としてタスクのアイデンティティを気にしません。タスクの締め切りなどの要因に基づいて、この時点でどのタスクを実行する必要があるかだけを気にします。

あなたは正しいですか? OSTaskChangePrioを使用する場合は、単にタスクの優先度に基づいてタスクを識別できなくなります。

+0

ただ1つの例では、他のタスクを起動するタスクを実行したときに優先度を下げたいと思うかもしれません。タスクが効果的にタスクIDを変更できるようにするということは、タスクを識別する方法としてそのタスクIDを使用することに依存できないことを意味します。また、ucos iiが優先順位反転を実行するときに、他のタスクで見られるように実際にタスクID(優先順位)を変更するかどうかは不明です。つまり、その瞬間にそのタスクID(優先度)を持つタスクがないため、そのタスクを識別するために優先度逆転が発生している間に元のタスクID(優先度)を使用しようとすると、OSコールは失敗しますか? – JonN

関連する問題