(toppers-users 20) 複数タスクのdly_tsk実行後の待ち解除順序について

Kimitsugu Nakao kimitsugu.nakao @ gmail.com
2020年 2月 22日 (土) 23:26:19 JST


亀亀うさぎです。

複数タスクのdly_tskからの起動順序について質問させていただきます。
Toppers/ASPをLinux上でシミュレーションで動作させています。

同じ優先度のタスク1~3を順番にdly_tsk(3000);で待ち状態にします。
次のサンプルだと3つのタスクはほぼ同じ時刻に待ち状態に入りますが、最初に待ち状態に入ったタスク1から順番に待ちが解除されて実行状態になると考えているのですが、そのようになりません。

コンフィギュレーションファイル
CRE_TSK(TASK1,{ TA_HLNG, 0, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK2,{ TA_HLNG, 1, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK3,{ TA_HLNG, 2, task, MID_PRIORITY, STACK_SIZE, NULL });

CRE_TSK(MAIN_TASK, { TA_HLNG | TA_ACT, 0, main_task, MAIN_PRIORITY,
STACK_SIZE, NULL });

ソースコード
void task(VP_INT exinf)
{

        syslog(LOG_INFO, "task[%d] delay start.", exinf);
        dly_tsk(3000);
        syslog(LOG_INFO, "task[%d] delay end.", exinf);

}

void main_task(VP_INT exinf)
{
        syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
        syslog(LOG_INFO, "Main-->実行開始");

        syslog(LOG_INFO, "Main-->タスクの起動");
        act_tsk(TASK1);
        act_tsk(TASK2);
        act_tsk(TASK3);

        syslog(LOG_INFO, "Main-->自タスクの終了");
        ext_tsk();
}

実行結果
System logging task is started on port 1.
Main-->実行開始
Main-->タスクの起動
Main-->自タスクの終了
task[0] delay start.
task[1] delay start.
task[2] delay start.
task[0] delay end.
task[2] delay end. ⇐ タスク1が実行状態にならない!
task[1] delay end.

ほぼ同じタイミングでdly_tskで待ち状態になったタスクの待ち解除は、FIFOではないのでしょうか?
以上、どなたか上記動作の理解についてご存じの方がいらっしゃれば、よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20200222/c73d9377/attachment.html>


More information about the USERS mailing list