2014年4月30日水曜日

Graphviz dotを使ってプロジェクトの関係図を作る

ちょっと思うことがあって、ここ数年のプロジェクトの関係をGraphviz dotを使って整理してみました。
青がハードウェア、黄はミドルウェア、緑はソフトウェアです。

ざっくり言うとmbedがここ数年の活動の起源になっていたのかな?と思います。


NXPのプロセッサが搭載されたBlackTankなるものを設計し、ツールやミドルウェアを整備したくなって、ここから「車輪の再開発沼」に突入しました。そして、Blackfinで「高価なツールを買わないとフラッシュに書けないですって!」と、フラッシュライターの開発が始まりました。まさに「ツール開発大好き」な人の典型的な感じです。しまいには、取扱説明書の作成に便利なLCD Toolとか、「誰が使うんだ!」と思わずツッコミを入れたくなります。

こんな感じで振り返ったのも、そろそろ違うことをやりたくなってきたからなのですが、一体何をやるのかは・・・まだ考えていません。

この関係図は以下のコードから生成しました。

digraph projects {

graph [label = "Projects"];

// Hardware Platform
"mbed" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"LPCXpresso" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"LPCXpresso Clock" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"BlackTank" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"BlueTank" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"ACB-BF592" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"TUNA-CAN" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"KOZOS EXPBRD" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];
"LPC800 Mini Board" [shape=circle, style=filled, color="#feeeee", fillcolor=blue, fontcolor=white];

// Firmware Solution
"NT-Shell" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"NT-Monitor" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"NT-Logger" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"NT-Basic" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"tinybmpio" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"tinywavio" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];
"UOS-LPC800" [shape=hexagon, style=filled, color="#feeeee", fillcolor=yellow, fontcolor=black];

// Software Solution
"Blackfin BlueBoot" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];
"Blackfin FastFlash" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];
"Blackfin MiniConfig" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];
"LCD Tool" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];
"kz_h8write" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];
"kz_xmodem" [shape=box, style=filled, color="#feeeee", fillcolor=green, fontcolor=black];

// The relationship
"mbed" -> "LPCXpresso" -> "LPCXpresso Clock";
"mbed" -> "LPC800 Mini Board" -> "UOS-LPC800";
"BlackTank" -> "BlueTank";
"BlackTank" -> "NT-Shell";
"BlackTank" -> "tinybmpio";
"LPCXpresso" -> "BlackTank";
"tinybmpio" -> "tinywavio";
"NT-Shell" -> "NT-Monitor";
"NT-Shell" -> "NT-Logger";
"NT-Shell" -> "NT-Basic";
"NT-Shell" -> "Blackfin BlueBoot";
"NT-Shell" -> "KOZOS EXPBRD";
"NT-Shell" -> "BlueTank";
"BlueTank" -> "LCD Tool";
"ACB-BF592" -> "BlueTank";
"ACB-BF592" -> "Blackfin BlueBoot";
"Blackfin BlueBoot" -> "Blackfin MiniConfig";
"Blackfin BlueBoot" -> "BlueTank";
"Blackfin BlueBoot" -> "ACB-BF592";
"Blackfin BlueBoot" -> "TUNA-CAN";
"Blackfin MiniConfig" -> "Blackfin FastFlash";
"kz_h8write" -> "kz_xmodem";
"NT-Basic" -> "KOZOS EXPBRD";
"kz_h8write" -> "KOZOS EXPBRD";
"kz_xmodem" -> "KOZOS EXPBRD";
}

2014年3月29日土曜日

Blackfin BlueBoot Version 0.4.0

Blackfin BlueBootのVersion 0.4.0をリリースしました。

  • ホスト/ターゲット間プロトコルを一部変更し、アクセス情報、ボード情報、CPU情報をそれぞれターゲットから取得して処理するように変更しました。
  • 新しいターゲットとして、金子システム社製のUCB-BF512とTUNA-CANを追加しました。
http://www.cubeatsystems.com/software/bfin-blueboot/bfin-blueboot_ja.html

全然地味すぎです。

2014年2月28日金曜日

「TOPPERS活用アイデア・アプリケーション開発コンテスト」のプレゼンテーション資料

TOPPERS活用アイデア・アプリケーション開発コンテスト」のプレゼンテーション資料が公開されました。2011年、2012年、2013年と3年分のプレゼンテーションをそれぞれダウンロードできます。

2011年は、Natural Tiny Shell Taskと題して、小規模組み込みシステムでVT100プロトコルを正しく扱う事ができるミドルウェアを発表しました。シリアル通信関数を用意するだけで、ホストとターゲット間の通信を取り持ってくれるようになっています。きちんと動作するシェルタスクが欲しいという用途に最適になるように設計しました。コマンドパーサーも用意してありますので、簡単に使い始める事ができます。


2012年は、NT-Loggerと題して、小規模組み込みシステムでも手軽にシステムの状態を観察できるロガーを発表しました。これも、NT-Shellと同様にシリアル通信関数を用意するだけで、ホスト側でシステム動作状態を確認できるというものでした。これは後々改良しようと思って、まだ手を付けていない感じになっています。


2013年は、以前から気になっていた「sample1って何なの?」という疑問に対して問題提起すべく、簡単なアプリケーションサンプルを提案しました。私はFreeRTOSからRTOSに入った人間ですので、TOPPERSのsample1には、正直びっくりしました。「何のサンプルなんだろう?」という素朴な疑問は、今も私の中にあります。


プレゼンテーション資料と一部のソースコードは、 http://www.toppers.jp/contest.html からダウンロードできます。

2014年1月26日日曜日

ビデオやオーディオのDMAバッファ管理手法(の続編の続編)

2012年の投稿「ビデオやオーディオのDMAバッファの管理手法 (動かして遊べるソースコード付き!)」や、2013年の投稿「DMAバッファ管理手法の続編」で触れたDMAバッファの管理手法は、以下の図に示すような簡単な概念を使って、実入出力処理を抽象化する手法について説明したものでした。


DMAを使用した転送を行なう場合、当たり前ですがDMAエンジンに対して転送指令を行なう必要があります。先の実装は抽象化した処理モデルに対する実装のみを提示したもので、実際にどこでDMAの設定を施して良いのかについては特に明示していませんでした。また、処理対象バッファの実装のヒントも示しておらず、実際の実装との距離を感じた方もいるかもしれません。

そこで、今回はframe.hにバッファの追加場所を、main.cにはDMAの設定箇所を@todoで記載したものを今回御紹介します。

無保証です。使用した結果の責任は一切負いません。

DMAの設定後、完了するまでそのバッファの内容に触れてはいけませんが、これは抽象化した処理モデルによって保証されています。実デバイスの処理に依存する箇所は、主にバッファとDMAに対する設定のみですので、実際には抽象化されたコードから実装までの距離は殆どありません。実際に私もこのモデルを使用してDSP上にオーディオ処理アプリケーションを書いていますが、まさに今回の実装をそのまま使用して遊んでいます。

今回の設計は特定のチャネルのみを想定していますが、この一連のモデルを拡張するだけで複数のチャネルを対象に処理する事ができるようになります。以下のように入出力チャネル数に応じて入力遅延器、出力キューを増やせばよい事になります。


冒頭の概念図に示したように、システム側で準備すべきバッファは、チャネル数に依存しない一連のバッファが一つあれば済むのもポイント。上位層のコードは、抽象化によって処理内容が一目でわかるようになるほか、将来の変更に対する柔軟性が高まりますので、遅延器やキューに対する処理によるオーバーヘッドを許容できるシステムにおいては、十分に検討のある方法です。

こんな感じで、2014年のCuBeatSystemsのブログは、ビデオやオーディオのDMAバッファ管理手法は続編の続編の続編から始まる事になりました。

今年もよろしくお願い申し上げます。

2013年12月30日月曜日

M25PX16をフルコントロール! (M25P16とM25PX16を比較してみる)

あらまし

2012年の10月にM25P16をフルコントロール!と題してM25P16の制御コードを公開しました。
今年に入ってM25PX16を使用する機会があり、それじゃあM25P16と何が違うの?というのを簡単に調べた結果をまとめてみました。一番下にはソースコードも示しましたのでご覧下さい。

M25P16とM25PX16

ブロック・ダイアグラムを見る限り、基本的な構成は変わりませんが、「64 OTP bytes」という何かが追加されています。ここで言うOTPとは、one-time programmableの略で、64バイトのワンタイム・ロムが存在するという事がわかります。なるほど、これは装置物に仕立てる時のアレコレに使えます。


次にメモリ・マップを確認してみると、M25PX16ではサブ・セクタが導入されている事がわかります。


M25PX16のコマンドがどうなっているのかというと、M25P16のコマンド・セットに加えて、幾つかの新しいコマンドが追加された形になっています。


M25PX16では、ロックレジスタが新設され、不用意なライトからメモリを保護できるように機能強化されています。また、DQ0とDQ1の二線を使って入出力ができる機能が追加されており、M25P16よりも高速にR/W可能なコマンドも用意されました。消去コマンドも、M25PX16ではサブ・セクタ単位での消去も可能となっています。

ざっと見た結果、M25P16を機能強化したのがM25PX16という感じで、M25P16を使用していた基板にM25PX16を使用する事もソフトウェアの変更のみで可能という事がわかりました。READ IDENTIFICATIONコマンドを発行すれば基板にどちらのフラッシュ・ロムが搭載されているのか検知可能ですから、下層でうまく実装する事で自動的に切り替える事も可能です。


ということで、M25P16とM25PX16に対する制御コードを記述し、実機動作確認済みのソースコード公開します。

ソースコード

  • 実機で動作確認済みのソースコードからターゲット依存箇所を取り除いたソースコードです。
  • 無保証です。一切の責任を負いません。
https://github.com/shinta-main-jp/M25PX16

2013年11月26日火曜日

ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました

TOPPERSアプリケーションコンテストに関連して、ET2013のTOPPERSパビリオンでショートプレゼンテーションをさせて頂きました。

ET2011では小規模組み込みシステム向けシェルのNT-Shell、ET2012では小規模組み込みシステム向けロガーのNT-Loggerと、二年連続でミドルウェアを提案しました。今回は、TOPPERSのsample1に対する改善という事で主旨を変更して提案しました。


ショートプレゼンテーションでは、リアルタイムオペレーティングシステムを使った組み込みシステムの設計、実装、検証について、日頃感じている事も少しだけお話させて頂いた次第です。これは、提案の題材として用いたシステムを使って実際に取得したデータから、リアルタイム性を確認する手段など簡単な手順を交えた内容としました。

非常に安価な装置を用いて、以下のように処理にかかる時間の分布などを得る事ができます。


リアルタイムオペレーティングシステムを使った組み込みシステムの場合、最悪値の検証が欠かせません。データを収集して整理するだけに留まらず、客観的に評価できるところまで落とし込む作業が必要です。


実開発では、正しく動作しているように見える時に「本当に意図した動作になっているのか?」まで確かめる必要があります。ショートプレゼンテーションでは、確認作業のアプローチの一つとして幾つかの方法を述べました。



2013年11月2日土曜日

adafruitでUOS-LPC800が紹介されていました

adafruit(http://www.adafruit.com/)でUOS-LPC800が紹介されていました。


彼らが販売しているLPC810 Mini Starter Packに絡めた紹介になっています。
これだけの部品で、小さなオペレーティング・システムが楽しめます。


ビルトイン・シリアル・ブートローダのおかげで、ホスト・ターゲット間でシリアル通信さえできればプログラムを書き込めるのも嬉しいポイントです。

AltStyle によって変換されたページ (->オリジナル) /