STM32でNUTTXを使ってみる

Task Control Interfaces Part2


前回はtask_create APIによるタスク起動を紹介しました。
タスク起動のやり方はもう1つあります。
そこで、今回はnxtask_init()とnxtask_activate()によるタスク起動を紹介します。
なお、これらの関数はtask_create関数の内部関数で、Nuttxのバージョンによって引数が変化する可能性が有ります。

この動作を確認するためのサンプルアプリを公開しています。
こちらの手順でapps/examplesディレクトリに追加してくださ い。
以下の手順でサンプルアプリをファームに組み込みます。
$ make clean
$ make menuconfig

Application Configuration > Examples で以下のアプリを追加してください。


新規アプリを追加したらひたすらExitで抜けます。
最後に以下の画面で[.config]を上書きします。


新しい[.config]を使ってファームウェアをビルドし、新しいファームウェアをマイコンに書き込みます。
nshに接続するとtask_test2アプリが追加されています。




initの引数で実行すると、Inactive状態でタスクが生成されます。
nsh> task_test2 init
pid=5
nsh> ps
  PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK   STACK COMMAND
    0     0   0 FIFO     Kthread N-- Ready              00000000 001000 Idle Task
    5     5 100 RR       Task    --- Inactive           00000000 001992 myTask 10 1
    2     2 100 RR       Task    --- Running            00000000 002000 nsh_main
nsh

(注)
pidはtcb構造体から取り出していますが、tcb構造体の構造は公開されていません。
理由は以下の通りです。
このアプリは、将来のバージョンでは動かなくなる可能性が有ります。

原文
In order to maintain portability, applications should not reference specific elements within these hidden structures.
These hidden structures will not be described further in this user's manual.

機械翻訳
携帯性を維持するためには、アプリケーションは、これらの隠された構造内の具体的な要素を参照するべきではない。
これらの隠された構造は、このユーザーのマニュアルにおいてこの先も説明されない。



activateの引数で実行すると、タスクに実行権が与えられます。
nsh> task_test2 activate
myTask start PID:5 loop:10 wait:1 system_timer:3680
nsh> myTask end PID:5 system_timer:3701



initに続いてdeleteの引数で実行すると、タスクを削除します。
nsh> task_test2 init
pid=11
nsh> ps
  PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK   STACK COMMAND
    0     0   0 FIFO     Kthread N-- Ready              00000000 001000 Idle Task
    2     2 100 RR       Task    --- Running            00000000 002000 nsh_main
   11    11 100 RR       Task    --- Inactive           00000000 001992 myTask 10 1
nsh> task_test2 delete
nsh> ps
  PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK   STACK COMMAND
    0     0   0 FIFO     Kthread N-- Ready              00000000 001000 Idle Task
    2     2 100 RR       Task    --- Running            00000000 002000 nsh_main
nsh>



APIの使い方に間違いがあるかもしれません。
こ ちらのドキュメントで確認してください。

ファームの書き込み方法と、nshへの接続方法はこちらに紹介しています。
STM32F4 Discovery
STM32F3 Discovery
STM32F103RB Nucleo
STM32F103 BluePill/BlackPill
STM32F103 VEボード
STM32F407 VGボード

続く...