過去のコマンドを表示してあげよう。システム今回のシステムは以下のようになっています。実際に開発するシステムに見立てていると考えてみて下さい。システムと開発用ホストは2つのUSBで接続されています。1つはLPCXpresso用でこれはLPCXpresso上のデバッガに接続されています。実際に開発するシステムによってはここは他のデバッガに置き換わる事もあるでしょう。1つは開発対象システムのUARTをUSBで入出力するための変換器との接続です。今回は秋月電子通商で販売されているFT2232Dを使った変換器を使用しました。実際の接続した状態は以下のようになっています。今回の内部タスク構成を以下のようにしました。ShellをフロントエンドとするシェルタスクLED点滅タスクを作るLED点滅タスクは一定時間間隔で動作しLEDの状態をトグルさせるタスクです。点滅の間隔は100[ms]ですが、データキューから値を受け取って変化させることができるようにしてあります。外部からデータキュー経由で点滅の速度(正確にいうとタスクの動作間隔)を変化させることができるようにしてあります。Shell(NT-Shell)を組み込んだシェルタスクを立てます。シェルタスクはUARTに対する入出力を管理しながら、ユーザの要求をシステムに伝達する役目を果たします。func_cb);}ntshell_executeは処理を戻さない関数です。UARTからの入出力関数を受け取って処理を行ないます。今回の例ではfunc_readは以下のようになっています。cnt);}同様にfunc_writeは以下のようになっています。cnt);}ユーザが操作を決定するとコールバック関数(上記ではfunc_cb)が呼ばれるようになっています。ユーザが入力を完了後、エンターキーを押した時の入力文字列が渡されるようになっています。ここでユーザの要求に応じて処理を行えば良い事になります。入力されたコマンドに応じて処理を行う。}ちなみに、この関数内部の実行スレッドはシェルタスクのスレッドです。今回のアプリケーションでは以下のように実装してみました。Shellに含まれるユティリティ関数で、文字列の比較を行うものです。0;}実際に使ってみる実際に使用している様子を動画で御紹介します。(NT-Shell)を追加する形で作業しました。プロジェクトはここからダウンロードできます。2011/03/08追記。公開当初のサンプルプロジェクトが使用しているNT-Shellにはバックスペース処理にバグがありました。修正したライブラリに差し替えましたまとめターゲットに対して対話型で操作要求ができるとちょっとした確認をする時に非常に便利です。今回はLPCXpresso(Cortex-M3搭載)でRTOS(TOPPERS/ASP)を動作させるという比較的小さな組み込みシステムでの応用例を示しました。システム内部の値を外部から変更することは当然デバッガなどでも可能です。したパラメータを変更したい場合や複数のパラメータを同時に変更したい時には不便です。対話型のシェルインターフェースがあれば、開発ホスト並の利便性を確保することも可能になります。念の為補足しておくと、LEDの点灯間隔を変化させるという行為が主眼ではありません。点灯間隔を変えるための実装にはもっと相応しいものがあるでしょう。今回はあくまでシステム内部の挙動をシェルを介して変化させるというところに視点をおいてあります。今回の実装では点灯間隔が狭くなるにつれてプロセッサの使用率も相当上がります。システムがどの程度の負荷を許容するのかを外部でパラメータを変更させながら見ることもできるでしょう。(NT-Shell)2014/11/02追記。公開サイトを変更しています。以下から最新版をダウンロードできます。http://www.cubeatsystems.com/firmware/ntshell/ntshell_ja.htmlCQ出版社の月刊誌インターフェース2013年1月号に記事を書きました。http://www.kumikomi.net/interface/sample/201301/if01_174.pdfインターフェース2013年1月号のソースコードは、CQ出版社のダウンロードサービスで入手できます。http://www.cqpub.co.jp/interface/download/contents.htmTOPPERS活用アイデア・アプリケーション開発コンテストでの資料はこちら。https://www.toppers.jp/docs/contest/presen2011_NaturalTinyShellTask.pdf2012/10/18追記。公開サイトを変更しています。以下から最新版をダウンロードできます。http://shinta.main.jp/firmware/ntshell/ntshell_ja.html小規模組込み機器を設計している時に必ずと言っていいほど欲しくなるのが、シェル端末のようなインターフェースです。シェル端末があれば、対話形式でシステムの状態制御や状態取得を行うことが可能になります。最近のプロセッサは小規模組み込み用途でも20年前のパソコンを超える性能を持っているのが現状です。シェルのような動作を実現するのに高性能なプロセッサが必要というわけではありません。シェルの動作を実現しようとするとVT100のような端末をエミュレーションする必要がでてきます。シェル端末が送信する多くの制御コードの解釈を正しく行うコードを実装するのは意外に面倒な作業です。このため、多くの小規模組み込み機器の開発においてなかなか実現されることが少ないのが現状でした。(NT-Shell)を設計実装してみました。このシェルを使えば、キー入力でおかしな制御コードが入ったりすることはありません。コマンドの入力時に左右にカーソルを移動させてスムーズに編集できるのも特徴です。上下方向キーによるヒストリ機能も搭載しています。デバッグ時のキー入力で慎重になる必要がなくなりますので、スムーズな作業ができるようになります。ソースコードはCランタイムライブラリに非依存で、小規模リアルタイムシステムなどへのポーティングも容易です。ポーティング時にはソースコードを変更する必要はありません。シェルの実行関数にシリアル通信ポートのI/O関数のポインタを渡すだけで済むようにしてあります。詳しくは付属のドキュメントを参照して下さい。ダウンロードはこちら:ntshell-0.0.4.tar.gz2011/03/08追記。0.0.1にはバックスペース処理にバグがありました。0.0.3に差し替えました。2011/04/30追記。0.0.3にはntoptとntlibcが含まれていませんでした。const属性に変更した上でvtpraseの実装を一部修正しました。0.0.4に差し替えました。2011/05/20追記。その後、入力補完機能を追加し、インターフェースをシンプルにしたバージョンを公開しました。http://shinta-main-jp.blogspot.com/2011/05/natural-tiny-shell-nt-shell.htmlをご覧下さい。動作の様子を記した動画もご覧頂けます。2011/05/22追記。mbedでも使えるようにしました。food)をご覧下さい。2012/10/18追記。公開サイトを変更しています。以下から最新版をダウンロードできます。(Atom)自己紹介shinta基板が大好きな組み込み系エンジニア。電気図面を描いてPCB上に美しく配線できた時に何とも言えない快感を覚える。ソフトウェアとドライバが一式になったパッケージをダウンロードします。インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。勢いよく「改良しました!」と宣言したh8writeですが、やっぱり書き込みに失敗するという事がわかりました。そもそも真の原因を掴めないまま改良したと言っても、何を改良したのか意味がわかりません。自分でもそんな突っ込みを入れたくなるのですが、その日はグ...システムにおけるレイテンシーとスループットの話題レイテンシーとは、あるシステムに何らかの入力を与え、それに対応する何らかの出力が出てくるまでの時間(遅延量)を指します。ある処理の実行を指令してから実際の結果が得られるまでに250ミリ秒かかったとすると、それは250ミリ秒のレイテンシーを持つシステムという事になります。放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。アップデートしました。このアップデートにより、以下の動画で示すような長い曲でも難なく再生させる事ができるようになりました。mkIIは便利なのですがオンフィールドで書き換えるには不便ですし、ユーザに書き変えを頼むわけにもいきません。Atmelが公開しているアプリケーションノートAVR109に自己プログラミングがありましたので試してみました。LPC824を使ったサウンドモジュールMicroSoundModuleを開発していました。このサウンドモジュールは、コマンドを受け取って色々な再生を行うもので、当初はこのコマンド処理部分の実装にNT-Shellを用いる計画でした。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。猫も杓子もIoTと皆さんが仰るので、その声が大きくなればなるほど自分は遠ざかる方向で生きていたのですが、そうすると完全に煙に巻かれたお爺さんのようになりまして、今は世の中が進んでおるんじゃのぉと言うだけの人です。moduleにブートローダを載せる(AVR109対応)随分前に対応しようと思い立っていたAVR109にようやく対応させた。以前やった時にうまく書けなかったのはボードのクロック精度が原因。ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。エコーバックのテストでやたらと文字が化ける。Shell(NT-Shell)のポーティング事例。