2011年3月1日火曜日

小規模組み込みシステムデバッグ用シェル - Natural Tiny Shell (NT-Shell)

2014/11/02追記。
公開サイトを変更しています。以下から最新版をダウンロードできます。
http://www.cubeatsystems.com/firmware/ntshell/ntshell_ja.html
CQ出版社の月刊誌インターフェース2013年1月号に記事を書きました。
http://www.kumikomi.net/interface/sample/201301/if01_174.pdf
インターフェース2013年1月号のソースコードは、CQ出版社のダウンロードサービスで入手できます。
http://www.cqpub.co.jp/interface/download/contents.htm
TOPPERS活用アイデア・アプリケーション開発コンテストでの資料はこちら。
https://www.toppers.jp/docs/contest/presen2011_NaturalTinyShellTask.pdf
2012/10/18追記。
公開サイトを変更しています。以下から最新版をダウンロードできます。
http://shinta.main.jp/firmware/ntshell/ntshell_ja.html

小規模組込み機器を設計している時に必ずと言っていいほど欲しくなるのが、シェル端末のようなインターフェースです。
シェル端末があれば、対話形式でシステムの状態制御や状態取得を行うことが可能になります。

最近のプロセッサは小規模組み込み用途でも20年前のパソコンを超える性能を持っているのが現状です。
また、シェルのような動作を実現するのに高性能なプロセッサが必要というわけではありません。

しかしながらきちんとシェルの動作を実現しようとするとVT100のような端末をエミュレーションする必要がでてきます。
シェル端末が送信する多くの制御コードの解釈を正しく行うコードを実装するのは意外に面倒な作業です。
このため、多くの小規模組み込み機器の開発においてなかなか実現されることが少ないのが現状でした。

そこで、今回は小規模組み込みシステム向けのデバッグ用シェルNatural Tiny Shell (NT-Shell)を設計実装してみました。


このシェルを使えば、キー入力でおかしな制御コードが入ったりすることはありません。
コマンドの入力時に左右にカーソルを移動させてスムーズに編集できるのも特徴です。
また、上下方向キーによるヒストリ機能も搭載しています。
デバッグ時のキー入力で慎重になる必要がなくなりますので、スムーズな作業ができるようになります。

ソースコードはCランタイムライブラリに非依存で、小規模リアルタイムシステムなどへのポーティングも容易です。
ポーティング時にはソースコードを変更する必要はありません。
シェルの実行関数にシリアル通信ポートのI/O関数のポインタを渡すだけで済むようにしてあります。

詳しくは付属のドキュメントを参照して下さい。
ダウンロードはこちら:ntshell-0.0.4.tar.gz

2011/03/08追記。
公開当初のVersion 0.0.1にはバックスペース処理にバグがありました。
修正したVersion 0.0.3に差し替えました。

2011/04/30追記。
Version 0.0.3にはntoptとntlibcが含まれていませんでした。
また、vtparseのテーブルがRAMに配置されるようなになっていたので、static const属性に変更した上でvtpraseの実装を一部修正しました。
以上の修正を行ったVersion 0.0.4に差し替えました。

2011/05/20追記。
その後、入力補完機能を追加し、インターフェースをシンプルにしたバージョンを公開しました。
http://shinta-main-jp.blogspot.com/2011/05/natural-tiny-shell-nt-shell.htmlをご覧下さい。
動作の様子を記した動画もご覧頂けます。

2011/05/22追記。
mbedでも使えるようにしました。
http://shinta-main-jp.blogspot.com/2011/05/natural-tiny-shell-nt-shellmbed.htmlNatural Tiny Shell (NT-Shell)をmbedで使ってみる (Eating your own dog food)をご覧下さい。

2012/10/18追記。
公開サイトを変更しています。
以下から最新版をダウンロードできます。
http://shinta.main.jp/firmware/ntshell/ntshell_ja.html

6 件のコメント:

  1. すばらしいソフトウェアを公開していただき、大変感謝しております。

    とてもマイナーなRTOSにポーティングしてみましたが、ポーティングなどという作業も必要とせず、ほとんど1~2時間程度で動作してしまいました。
    バックスペースやカーソルキーに正しく応答しているのを見て、思わず声を上げて喜んでしまいました(笑)

    ところで、配布アーカイブに、ntopt.c, ntopt.hが含まれていないようです。

    返信削除
  2. 伸幸さん。

    ありがとうございます。
    こういったフィードバックは本当に嬉しいです。

    ntoptの件もありがとうございます。
    追加したパッケージをアップロードしましたのでお試し頂ければと思います。

    0.0.3の実装ではvtparseに対するテーブルがRAM上に展開されていたかもしれません。
    これに対する対策もしてあります。

    ところで差し支えなければ「とてもマイナーなRTOS」の名前について教えて頂けますか?
    とても興味あります。(笑)

    返信削除
  3. さっそく0.0.4をアップしていただき、ありがとうございます。
    さっそく、アップデートさせていただきます。

    vtparseのテーブルは、こっそりとstatic const属性に変更して移植しました。

    とてもマイナーなRTOSの件ですがw
    TIのDSP/BIOSです。
    TRON系と比べるといろいろと貧弱ですが、このごろよく使います。タダですし^^

    返信削除
  4. 伸幸さん

    おぉ!DSP/BIOS!
    普段、私が触れている環境でないところで動作して頂けるなんて嬉しいです。
    今後ともよろしくお願いします!

    返信削除
  5. ご無沙汰しております。
    その後、SH2用のNORTIにも移植して、ばっちり動いてます。

    本当に感謝しております。

    ところで、TOPPERSプロジェクトにあったプレゼンを拝見させていただきました。
    僕の名前があってびっくりしました。
    使わせていただいた報告をしただけなのに、恐縮です

    返信削除
  6. 伸幸さん

    私が初めて「使ってくれている人がいる」と認識できたのでとても貴重でした。
    おかげで今でも「もう少し良くしたいな」というモチベーションを維持できています。

    こちらこそありがとうございますです。 :)

    返信削除