2012年5月6日日曜日

Natural Tiny Shell (NT-Shell) をLX9で使ってみる

Natural Tiny Shell (NT-Shell)の次のリリースに向けて「Eating your own dog food」を実践しているわけですが、今回はLX9で試してみることにしました。


と言っても、NT-Shellはもともと「UARTのReadとWriteさえ用意してくれればうまく行くよ。」という設計なのであまり苦労する事はありません。

UARTの付いたHardware Platformを使ってHello Worldプロジェクトを新規作成します。


次にNT-Shellのソースコードを持ってきてプロジェクトに追加します。


後はhelloworld.cにNT-Shell用の記述を追加するだけ。
以下のようにシンプルな実装で直ぐにNT-Shellを試す事ができます。

簡単です。

#include "platform.h"
#include "ntshell.h"
#include "xuartlite.h"

XUartLite xu;
ntshell_t ntshell;

static int func_read(char *buf, int cnt)
{
 int i;
 for (i = 0; i < cnt; i++) {
  u8 c;
  while (XUartLite_Recv(&xu, &c, 1) != 1) {
  }
  buf[i] = c;
 }
    return 0;
}

static int func_write(const char *buf, int cnt)
{
 int i;
 for (i = 0; i < cnt; i++) {
  u8 c = buf[i];
  while (XUartLite_Send(&xu, &c, 1) != 1) {
  }
 }
    return 0;
}

static int func_callback(const char *text, void *extobj)
{
    fprintf(stdout, "The user input text is '%s'\n", text);
    return 0;
}

int main()
{
    init_platform();

    u16 UartDeviceId = 1;
    XUartLite_Initialize(&xu, UartDeviceId);
    ntshell_execute(&ntshell, func_read, func_write, func_callback, NULL);

    cleanup_platform();

    return 0;
}

BSPに含まれるライブラリのインターフェースを見て、stdinとstdoutが使えそうかと思う方もいるかもしれません。 実際にやってみるとわかるのですが、stdoutは通常のlibcと同様バッファリングされているのでNT-Shellで使うのには向きません。fflush(stdout)してもバッファはフラッシュされませんでした。そこで上記のようにXUartLiteのAPIをそのまま呼んでいます。


同様にしてXilkernel上での実装も可能ですので、履歴編集機能を持つシェル(風味)インターフェースを気軽に追加する事ができます。

ちなみに、ハードウェアプラットフォーム211に対してのBSPを合わせて以下の容量になりました。

   text    data     bss     dec     hex filename
  69044    1428    8780   79252   13594 hello_world_0.elf

0 件のコメント:

コメントを投稿