PC版 SYSLAB blog  http://syslab.asablo.jp/blog/......

TRZ1104A (11) Natural Tiny Shell (NT-Shell) を使ってみる (2)
2012-12-04


禺画像]
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 だけだ。