と言っても、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 件のコメント:
コメントを投稿