0

いくつかの RTOS (pSOS、VxWorks、QNX) の経験がありますが、MicroC/OS II (ucos ii) は初めてです。ucos ii のユニークな点は、タスクに一意の ID を持つ代わりに優先度を使用してタスクを一意に識別し、すべてのタスクが異なる優先度でなければならないため、ラウンド ロビン スケジューリングがサポートされていないことです。それくらい、わかります。質問は次のとおりです。

OSTaskChangePrio() を使用してタスクの優先度を変更しても、優先度を変更したばかりのタスクの優先度 (タスク ID) を格納していたコードやその他のタスクで問題が発生することはありません。実際、優先度を変更すると、タスクのアイデンティティが変更されます。これはどのように問題ではないのですか?

4

2 に答える 2

0

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

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

于 2016-09-21T10:14:11.740 に答える
0

この関数は、要求された優先度/ID を持つタスクが既に存在するかどうかを確認し、存在する場合はエラーを返します。したがって、タスクの優先度を変更する場合は、タスク テーブルに適切な場所を残す必要があります。ucosii は最大 255 個のタスクを管理できますが、すべてのプロジェクトで OS_LOWEST_PRIO 値を指定する必要があります。このようにして、利用可能なタスクの量を制限します。ucosii は psos や vxworks とは異なり、nucleus や threadx に似ており、非常に薄い OS です。

于 2016-08-04T14:04:18.787 に答える