禺画像]
NT-Shell を実装するためにドキュメントを読んでいると、必要なのは getchar/putchar に相当する関数ではなくて read/write に相当する関数であることがわかった。
さっそく UARTReceive を作成する。
int UARTReceive(char *buf, int cnt, void *extobj)
{
int i;
for (i = 0; i < cnt; i++)
buf[i] = UARTReceiveByte();
return 0;
}
UARTSend も若干修正。
int UARTSend(const char *BufferPtr, int Length, void *extobj)
{
while ( Length != 0 ) {
/* THRE status, contain valid data */
#if !TX_INTERRUPT
while ( !(LPC_UART->LSR & LSR_THRE) );
LPC_UART->THR = *BufferPtr;
#else
/* Below flag is set inside the interrupt handler when THRE occurs. */
while ( !(UARTTxEmpty & 0x01) );
LPC_UART->THR = *BufferPtr;
UARTTxEmpty = 0; /* not empty in the THR until it shifts out */
#endif
BufferPtr++;
Length--;
}
return 0;
}
callback はダミーにしておこう。
static int func_callback(const char *text, void *extobj)
{
xprintf("%s\r\n",text);
return 0;
}
コンパイル・リンク・フラッシュライト
起動と同時にプロンプトが出てくる。
いいね〜。
文字列を打ち込んでみる。
バックスペースで修正
ヒストリー機能も使ってみる
callback が printf だけなので今の所ここまでだ。
ただ不便なのは一度ヒストリー機能を使うとコマンドラインに文字列が残ってしまうことだ。DOS プロンプトのように何もない状態にすることができない。
さて、これだけじゃ面白くないので NT-Monitor も動かしてみる。
その前にメモリ情報を実装しておこう。残念ながらこれが有効なのは scroll だけだ。
セコメントをする