+スターの公開アカウントをフォローして、エキサイティングなコンテンツを見逃さないようにしましょう
ソース | Gitee
著者 | ヌラッシュ
コマンド ライン インタラクションはホスト コンピューター ソフトウェアでは比較的一般的であり、マイクロコントローラーにコマンド インタラクションを実装するケースは数多くあります。オープン ソースのコマンド ライン ツール nr_micro_shell を次に示します。
プロジェクトアドレス: github.com/Nrusher/nr_micro_shell
1 はじめに
デバッグやメンテナンスを行う場合、特定のパラメータを取得および設定したり、特定の操作を実行したりするために、マイクロコントローラと対話する必要があることがよくあります。nr_micro_shell は、この要求を満たすためにリソースが少ない MCU 向けに作成された基本的なコマンド ライン ツールです。
強力なfinshコマンド ライン インタラクション ツールが RT_Thread コンポーネントで提供されていますが、 ROM および RAM リソースが少ないマイクロコントローラにとってfinshはまだ少しかさばります。これらのプラットフォームでは、基本的なコマンド ライン インタラクション機能を保持したい場合は、nr_micro_shellを使用します。良い選択。
nr_micro_shellには次の利点があります。
1. 使用するリソースが少なく、使いやすく、柔軟で便利です。使用プロセスには、shell_init() と shell() の 2 つの関数だけが必要であり、このツールは、追加のコーディング作業を行わずに、RTOS またはベアメタルのいずれを使用している場合でも簡単に適用できます。
2. 優れたインタラクティブなエクスペリエンス。Linux シェル コマンド ラインと完全に似ており、シリアル ポート ターミナルが ANSI (Hypertrm ターミナルなど) をサポートしている場合、基本的なコマンド ライン インタラクションをサポートするだけでなく、Tab キー コマンド補完、クエリ履歴コマンド、および矢印キーを使用してコマンド ラインを移動することもできます。カーソルを移動して変更します。
3. 優れた拡張性。nr_micro_shell はカスタムコマンドの標準関数プロトタイプを提供しており、コマンドに合わせてコマンド関数を記述し、コマンド関数を登録するだけでコマンドを使用できます。
同じ構成でのnr_micro_shellとfinshが占有するリソースの比較 (finsh は msh を使用しません)
オリジナルプロジェクト | nr_micro_shell インクリメントを追加 | フィン増分を追加 | |
---|---|---|---|
ロム | 63660 | +3832 | +26908 |
ラム | 4696 | +1104 | +1304 |
どちらの構成も、
最大 3 つの履歴コマンド。
タブ補完をサポートします。
コマンドラインの最大長は 100 です。
最大 10 個のコマンド パラメータ。
コマンド ライン スレッド スタックは 512 バイトです。
nr_micro_shell のデモンストレーション効果は次のとおりです
1.1 ディレクトリ構造
名前 | 説明する |
---|---|
ドキュメント | デモ GIF 画像などを含むドキュメント ディレクトリ。 |
例 | コマンド関数の例を含むディレクトリの例: nr_micro_shell_commands.c および RT_Thread の使用例 nr_micro_shell_thread.c |
株式会社 | ヘッダーファイルのディレクトリ |
送信元 | ソースコードディレクトリ |
1.2 ライセンス
nr_micro_shell パッケージは MIT ライセンスに基づいてライセンスされています。 LICENSE
詳細についてはドキュメントを参照してください。
1.3 依存関係
依存関係なし
2. RT_Thread での ENV ツールの使用
RT_Thread nr_micro_shell パッケージを使用するには、RT-Thread のパッケージ マネージャーで選択する必要があります。具体的なパスは次のとおりです。
RT-Thread online packages
tools packages --->
[*] nr_micro_shell:Lightweight command line interaction tool. --->
キーを押して関連する設定を選択した後sapce
、 を押してenter
関連パラメータを設定します。次に、RT-Thread のパッケージ マネージャーを自動的に更新するか、 pkgs --update
コマンドを使用してパッケージを BSP に更新します。
サンプルを実行する必要がある場合は、RT_Thread 設定のオプションがUsing console for kt_printf.
オンになっていること、kt_printf が正常に動作できること、およびUse components automatically initialization.
オプションがオンになっていることを確認してください。nr_micro_shell は、コンパイルして直接ダウンロードするか、シミュレートすることで使用できます。コマンド ラインが空白の場合は、Tab キーを押して、サポートされているすべてのコマンドを表示します。コマンドのテスト例については、doc/pic の下にある使用例のアニメーションを参照してください。コマンド処理のカスタマイズは下記3.を参照し、ベアメタル下のnr_micro_shellパッケージ内のメソッドを使用してください。
3. 地金の下で使用する
3.1 構成:
すべての設定作業はnr_micro_shell_config.hで行うことができます 。詳細については、ファイル内のコメントを参照してください。
3.2 使用法:
すべてのファイルがプロジェクトに追加されていることを確認してください。
nr_micro_shell_config.h のマクロ関数「shell_printf()、ansi_show_char()」が プロジェクト内で正常に使用できることを確認してください 。
使用例は以下の通りです
#include "nr_micro_shell.h"
int main(void)
{
/* 初始化 */
shell_init();
while(1)
{
if(USART GET A CHAR 'c')
{
/* nr_micro_shell接收字符 */
shell(c);
}
}
}
ハードウェア入力を直接使用する前に、次のコードを使用して (情報が正常に出力されることを確認するため)、nr_micro_shell が正常に実行できるかどうかを確認することをお勧めします。
#include "nr_micro_shell.h"
int main(void)
{
unsigned int i = 0;
//匹配好结束符配置 NR_SHELL_END_OF_LINE 0
char test_line[] = "test 1 2 3\n"
/* 初始化 */
shell_init();
/* 初步测试代码 */
for(i = 0; i < sizeof(test_line)-1; i++)
{
shell(test_line[i]);
}
/* 正式工作代码 */
while(1)
{
if(USART GET A CHAR 'c')
{
/* nr_micro_shell接收字符 */
shell(c);
}
}
}
3.3 独自のコマンドを追加する
STEP1:
nr_micro_shell_commands.c *にコマンド関数を実装する必要があります。コマンド関数のプロトタイプは以下のとおりです
void your_command_funtion(char argc, char *argv)
{
.....
}
argc は引数の数です。argv には、各パラメータの開始アドレスと内容が格納されます。入力文字列が
test -a 1
argcは 3 で、argvの内容は次のようになります。
-------------------------------------------------------------
0x03|0x08|0x0b|'t'|'e'|'s'|'t'|'\0'|'-'|'a'|'\0'|'1'|'\0'|
-------------------------------------------------------------
最初または 2 番目のパラメータの内容を知りたい場合は、次を使用する必要があります。
/* "-a" */
printf(argv[argv[1]])
/* "1" */
printf(argv[argv[2]])
STEP2:使用する前にコマンドを登録する必要があります コマンドの登録方法は2通りあります。
1. 設定ファイルに定義されていない場合はNR_SHELL_USING_EXPORT_CMD
、static_cmd[]
テーブルに記述します
const static_cmd_st static_cmd[] =
{
.....
{"your_command_name",your_command_funtion},
.....
{"\0",NULL}
};
注: {"\0", NULL} は削除しないでください。
2. 設定ファイルに定義されておりNR_SHELL_USING_EXPORT_CMD
、NR_SHELL_CMD_EXPORT()
使用するコンパイラをサポートしている場合は、以下の方法でコマンドを登録できます。
NR_SHELL_CMD_EXPORT(your_command_name,your_command_funtion);
4. Linux で nr_micro_shell シミュレーションを使用する
./examples/simulator/
nr_micro_shell シミュレーション コードはプロジェクト./examples/nr_micro_shell_commands.c
ディレクトリに保存されます。上記のようにファイルにカスタム コマンドを追加します。追加が完了したら、make コマンドを使用してソース コードをコンパイルします。生成される実行可能ファイルは または./examples/simulator/out/nr_micro_shell
です./examples/simulator/out/nr_micro_shell_db
。使用できるmakeコマンドは以下のとおりです。
# 编译可执行文件
make
# 编译可仿真执行文件
make debug
# 清除编译生成文件
make clean
5. 注意事項
NR_SHELL_USING_EXPORT_CMD を使用して、使用習慣に応じてコマンドの登録方法を選択します。
レジストリ登録コマンドを使用する場合は、プロジェクトにレジストリが存在することを確認してください。
const static_cmd_st static_cmd[] =
{
.....
{"\0",NULL}
};
NR_SHELL_CMD_EXPORT() を使用する場合は、NR_SHELL_CMD_EXPORT() で使用されるコンパイラがそれをサポートしていることを確認してください。サポートされていない場合は、エラーが報告されます。
nr_micro_shell は、ESC キーなどの制御キー (制御文字) をサポートしていません。
オリジナル
来る
ソース
で:
https://gitee.com/nrush/nr_micro_shell声明:この記事の内容はインターネットから得たものであり、著作権は元の著者に属します。作品に著作権上の問題がある場合は削除いたしますのでご連絡ください。
------------ 終了 ------------
公式アカウントをフォローして「グループを追加」と返信するとルールに従って技術交流グループに参加でき、「1024」と返信するとさらにコンテンツが閲覧できます。
さらに共有を表示するには、「元のテキストを読む」をクリックしてください。