PIC32MM CPUを活用する

令和3年 6月

    FreeRTOS-Plus-CLIIの使い方

 FreeRTOS-Plusに含まれているFreeRTOS-Plus-CLIの使い方は、FreeRTOSの説明文書以外にあまり見かけないので備忘録として書いておきます。

 1.概要

 FreeRTOS-Plus-CLIはCommand Line Interfaceの名前どおり、コマンドを文字列として受け取って、その実行結果を文字列で返します。従って下記の処理は含まれていません。
 ・コマンドを受け取って文字列に格納する
 ・実行結果の文字列をユーザーに出力する
 個別のIOには接続されていないため、プログラムのデバッグ段階では文字列を渡して結果の文字列をチェックするという方法を取る事ができ、シミュレータのみで動作確認が終わります。


 2.主要な関数
 
 コマンドを実行するのはFreeRTOS_CLIProcessCommand()関数で引数として、
 ・コマンド文字列へのポインタ(コマンドの終端は'\0')
 ・実行結果を格納するバッファへのポインタ
 ・実行結果を格納するバッファが格納可能な文字数
を取ります。関数の返り値は、実行結果がバッファに収まりきらず続きの出力がある場合はpdTRUEを、そうでなければpdFAILを返します。
 関数がpdTRUEを返した場合、再びFreeRTOS_CLIProcessCommand()関数を実行して残りの出力結果を入手します。

 コマンドの中には引数が必要なものがあります。各コマンドごとに要求される引数の数は決まっています。コマンド文字列から引数を取り出すための関数はFreeRTOS_CLIGetParameter()で引数として下記を取ります。
 ・コマンド文字列へのポインタ
 ・取り出す引数の番号(最初の引数は1)
 ・取り出した引数の文字数を格納する変数へのポインタ
 関数の戻り値は取り出した引数へのポインタです。

 コマンドはユーザーによる追加が可能で下記の関数を使用します。
BaseType_t FreeRTOS_CLIRegisterCommand(
const CLI_Command_Definition_t * const pxCommandToRegister );
 コマンドの追加にはコマンド毎にCLI_Command_Definition_t型のデータを渡します。
 CLI_Command_Definition_t型は下記のデータで構成されます・
 ・コマンドのテキスト文字列へのポインタ
 ・コマンドヘルプで表示させる文字列へのポインタ
 ・コマンドを処理する関数へのポインタ
 ・コマンドが要求する引数の数
 関数の戻り値は追加の可否で成功ならpfTRUE, 失敗ならpdFALSEを返します。

コマンドを処理する関数は下記の関数形式にしたがっていることが条件です。
typedef BaseType_t (*pdCOMMAND_LINE_CALLBACK)( char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString );


 3.UARTへの接続

 FreeRTOS-Plus-CLIを実機で使用する場合には、コマンド入力とコマンド出力結果を何らかのIOに接続する必要があります。
また、コマンド入力は最終的にはキーボード入力に接続されるのが一般的です。この場合はキー入力で使用される最低限の編集機能(ESC, BS)に対応していることが望まれます。
 これらのサンプルとして下記が示されています。
 https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_CLI/FreeRTOS_Plus_CLI_IO_Interfacing_and_Task.html


 4.ソースコードの修正

 今回のように外部でソースコードのメンテナンスが行われているコードは出来るだけ変更しないで使用する方が後々のVer upを考えると望ましいのですが、幾つか変更しないといけない点があります。

  ・FreeRTOS_CLI.h

 C++コンパイラで使用する前提になっていません。ヘッダファイルの先頭と文末に以下の宣言を追加する必要があります。
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

  ・FreeRTOS_CLI.c

 こちらは必須ではありません。
FreeRTOS_CLI.cではコマンド出力用バッファをソースコード内で用意しています。
が、コマンド出力用バッファは関数の引数として外部に分離されており、ここでワザワザ用意する必要はありません。コマンド入力用バッファと一緒に宣言した方が見通しが良いと考えるなら、これらの記述は削除した方が良い。


 以上、ごく簡単に使い方の説明を書いてみました。現時点ではごく簡単なコマンドを幾つか書いた程度で、十分に使い込んだと言えるレベルではないのですが、インターフェースがバッファで分離されているため、極めて見通しの良いつくりになっているのは高評価です。


前へ  次へ