昔のどこかのバージョンで、フラッシュロムのライトサイクルとかその類の情報をターゲットから貰うようにしたのですが、これも次のバージョンでは整理したいと考えています。BlueBootは以下のサイトからダウンロードできます。趣味でもお仕事でも御自由にお使い下さい。動作させた結果、起きた如何なる問題も当方は責任を持ちません。"BlacKOZOS"の設計方針UOS-LPC800UOS-LPC800を公開してから早くも一年が経ちました。思いっきり遊びでしか使えない感じのOSが一部の方に好評で、ここでも述べたようにadafruitでも紹介されたりもしています。本当は公開後に色々機能追加する事を考えていましたが、LPC-810と組み合わせて紹介されているので、彼に入りきらなくなるのは可哀想です。しようかな?と考えていたら1年が経過していました。KOZOSUOS-LPC800は、坂井さんがお作りになったKOZOSが制作のきっかけになっています。KOZOSは、完全ホビー向けOSでありながらソフトウェア割り込みを使ったシステムコールによる操作を実現するなど、とても興味深い作り込みになっています。坂井さんによるユニークなキャラクタであるニジマス君も見逃せません。坂井さんの書籍が販売されてから私も早速購入して色々な活動に取り組みました。あと、もっと楽しみたい人のためのハードウェアとか。Blackfinあれから二年ほど経ち、現在は主にBlackfinを使って色々遊んでいます。私の場合、新しいプロセッサをいじる場合には、クラスの中で小さいものを選んで使う事にしています。現在はBF592というプロセッサで離散的に遊んでいるのですが、この小さなプロセッサでキビキビ動作するOSを書いてみたくなりました。名前も決めてあって、BlackfinとKOZOSをかけて、BlacKOZOSです。「ブラッコゾス」です。「ブッコロス」ではありません。本体OSは何もないのに、キャラクタはもうあります。完全に順番を間違っています。設計は以下のように進める事にしました。1普通に動作するだけのプログラム普通に動作するだけのプログラムが、どうしてOSに発展するのか理解できないかもしれませんが、最初のタスクしか実行できないところから"BlacKOZOS"の開発をスタートさせる事にしました。これは、まさにOSを使うことで解決したい問題を提示した形です。言うと、複数の仕事を並行し、かつ効率的に処理させたい、複数の仕事を協調動作させたい、という課題。次に、1で動作している仕事を一切阻害する事なく、割り込み処理の中で1で使っているレジスタを退避、復旧させます。ここでは、コンテキストスイッチ、つまりタスクの切り替えは行わず、退避したレジスタをそのまま復旧させます。レジスタ周辺の操作は少しでも間違えると動作しません。このコンテキストスイッチなしのレジスタ退避復旧処理は、正しく実装できた時点で、みかけ上1と同じ処理を提供する事になります。レジスタの退避と復旧を正しく行いながら、依然としてかなり単純な実行モデルを維持できます。3コンテキストスイッチを追加するレジスタの退避復旧が実現できたら、コンテキストスイッチを追加します。2を先行させる事にはもうひとつ別の理由があり、2が実現できた時点でコンテキストスイッチは基本的にC言語で記述できるようになっています。いうことかと言うと、レジスタ退避作業によって実行中のコンテキストを復旧するためのレジスタは保存されているので、それらをかなり自由に使うC言語を使ってレジスタを汚しても、レジスタ復旧で必要な値へ復旧できるわけです。リンクリストを辿ったりする作業をアセンブラで書くのも面倒なのでうってつけというわけです。まとめ今回は大雑把な設計方針について明らかにし、作業の道筋を立てました。Blackfinの場合、割り込みマスクの取り扱いが1つのポイントかもしれません。その辺りも後々触れていければと思います。OS、Linuxで動作可能なChaNさんのFM音源モジュールの簡易シミュレーターhttp://elm-chan.org/junk/32bit/nxpdip.html#fmに掲載されたFM音源の実験で掲載されたコードは、移植性が高く小規模なマイコンでも動作する上、極めて素直に実装されていて「これは凄い!」と驚くばかりです。あぁ、優秀な人はこうやって設計実装できるんだなぁと実装の各所を見て感じました。私も、金子システムのTUNA-CANなどに移植してFM音源の動作を楽しんでいるのですが、ここで移植の過程で最初に作ったシミュレーターのコードを掲載する事にしました。OS、Linux上でコンパイル可能。出来上がったバイナリに出力WAVファイル名を与えると、エレピが単音で発音されるWAVファイルが出来上がります。Audacityで開いた時の様子は以下。シミュレーターというにはお粗末な感じですが、これにChaN氏が作ったようなフロントエンドを被せれば立派なFM音源ソフトになります。マイコンをベースにしていると、あちこちに持ち歩くのも面倒ですが、PCベースなら色々な実験も楽!というわけです。W5300始めました今年の初めに、私にとって神様のように色々できちゃう方から「それなら、これをあげるよ。」と頂いてしまったW5300の評価キット(WIZ200WEB-EVB)をようやく触り始めました。最近興味がもくもく湧いているjQueryとかBootstrap等と組み合わせて、色々なオモチャが作れるのではないだろうかと考えているところです。Node.jsなんかも楽しそうですが、まずはチマチマやろうと考えています。dotを使って整理してみました。青がハードウェア、黄はミドルウェア、緑はソフトウェアです。言うとmbedがここ数年の活動の起源になっていたのかな?と思います。NXPのプロセッサが搭載されたBlackTankなるものを設計し、ツールやミドルウェアを整備したくなって、ここから「車輪の再開発沼」に突入しました。Blackfinで「高価なツールを買わないとフラッシュに書けないですって!」と、フラッシュライターの開発が始まりました。「ツール開発大好き」な人の典型的な感じです。Toolとか、「誰が使うんだ!」と思わずツッコミを入れたくなります。こんな感じで振り返ったのも、そろそろ違うことをやりたくなってきたからなのですが、一体何をやるのかは・・・まだ考えていません。この関係図は以下のコードから生成しました。0.4.0をリリースしました。ホスト/ターゲット間プロトコルを一部変更し、アクセス情報、ボード情報、CPU情報をそれぞれターゲットから取得して処理するように変更しました。新しいターゲットとして、金子システム社製のUCB-BF512とTUNA-CANを追加しました。http://www.cubeatsystems.com/software/bfin-blueboot/bfin-blueboot_ja.html全然地味すぎです。「TOPPERS活用アイデア・アプリケーション開発コンテスト」のプレゼンテーション資料が公開されました。2011年、2012年、2013年と3年分のプレゼンテーションをそれぞれダウンロードできます。Taskと題して、小規模組み込みシステムでVT100プロトコルを正しく扱う事ができるミドルウェアを発表しました。シリアル通信関数を用意するだけで、ホストとターゲット間の通信を取り持ってくれるようになっています。動作するシェルタスクが欲しいという用途に最適になるように設計しました。コマンドパーサーも用意してありますので、簡単に使い始める事ができます。2012年は、NT-Loggerと題して、小規模組み込みシステムでも手軽にシステムの状態を観察できるロガーを発表しました。これも、NT-Shellと同様にシリアル通信関数を用意するだけで、ホスト側でシステム動作状態を確認できるというものでした。これは後々改良しようと思って、まだ手を付けていない感じになっています。2013年は、以前から気になっていた「sample1って何なの?」という疑問に対して問題提起すべく、簡単なアプリケーションサンプルを提案しました。私はFreeRTOSからRTOSに入った人間ですので、TOPPERSのsample1には、正直びっくりしました。「何のサンプルなんだろう?」という素朴な疑問は、今も私の中にあります。ダウンロードできます。(動かして遊べるソースコード付き!)」や、2013年の投稿「DMAバッファ管理手法の続編」で触れたDMAバッファの管理手法は、以下の図に示すような簡単な概念を使って、実入出力処理を抽象化する手法について説明したものでした。DMAを使用した転送を行なう場合、当たり前ですがDMAエンジンに対して転送指令を行なう必要があります。先の実装は抽象化した処理モデルに対する実装のみを提示したもので、実際にどこでDMAの設定を施して良いのかについては特に明示していませんでした。処理対象バッファの実装のヒントも示しておらず、実際の実装との距離を感じた方もいるかもしれません。そこで、今回はframe.hにバッファの追加場所を、main.cにはDMAの設定箇所を@todoで記載したものを今回御紹介します。ここからダウンロード無保証です。使用した結果の責任は一切負いません。DMAの設定後、完了するまでそのバッファの内容に触れてはいけませんが、これは抽象化した処理モデルによって保証されています。実デバイスの処理に依存する箇所は、主にバッファとDMAに対する設定のみですので、実際には抽象化されたコードから実装までの距離は殆どありません。実際に私もこのモデルを使用してDSP上にオーディオ処理アプリケーションを書いていますが、まさに今回の実装をそのまま使用して遊んでいます。今回の設計は特定のチャネルのみを想定していますが、この一連のモデルを拡張するだけで複数のチャネルを対象に処理する事ができるようになります。以下のように入出力チャネル数に応じて入力遅延器、出力キューを増やせばよい事になります。冒頭の概念図に示したように、システム側で準備すべきバッファは、チャネル数に依存しない一連のバッファが一つあれば済むのもポイント。上位層のコードは、抽象化によって処理内容が一目でわかるようになるほか、将来の変更に対する柔軟性が高まりますので、遅延器やキューに対する処理によるオーバーヘッドを許容できるシステムにおいては、十分に検討のある方法です。こんな感じで、2014年のCuBeatSystemsのブログは、ビデオやオーディオのDMAバッファ管理手法は続編の続編の続編から始まる事になりました。今年もよろしくお願い申し上げます。(Atom)自己紹介shinta基板が大好きな組み込み系エンジニア。電気図面を描いてPCB上に美しく配線できた時に何とも言えない快感を覚える。ソフトウェアとドライバが一式になったパッケージをダウンロードします。インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。勢いよく「改良しました!」と宣言したh8writeですが、やっぱり書き込みに失敗するという事がわかりました。そもそも真の原因を掴めないまま改良したと言っても、何を改良したのか意味がわかりません。自分でもそんな突っ込みを入れたくなるのですが、その日はグ...システムにおけるレイテンシーとスループットの話題レイテンシーとは、あるシステムに何らかの入力を与え、それに対応する何らかの出力が出てくるまでの時間(遅延量)を指します。ある処理の実行を指令してから実際の結果が得られるまでに250ミリ秒かかったとすると、それは250ミリ秒のレイテンシーを持つシステムという事になります。放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。アップデートしました。このアップデートにより、以下の動画で示すような長い曲でも難なく再生させる事ができるようになりました。mkIIは便利なのですがオンフィールドで書き換えるには不便ですし、ユーザに書き変えを頼むわけにもいきません。Atmelが公開しているアプリケーションノートAVR109に自己プログラミングがありましたので試してみました。LPC824を使ったサウンドモジュールMicroSoundModuleを開発していました。このサウンドモジュールは、コマンドを受け取って色々な再生を行うもので、当初はこのコマンド処理部分の実装にNT-Shellを用いる計画でした。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。猫も杓子もIoTと皆さんが仰るので、その声が大きくなればなるほど自分は遠ざかる方向で生きていたのですが、そうすると完全に煙に巻かれたお爺さんのようになりまして、今は世の中が進んでおるんじゃのぉと言うだけの人です。moduleにブートローダを載せる(AVR109対応)随分前に対応しようと思い立っていたAVR109にようやく対応させた。以前やった時にうまく書けなかったのはボードのクロック精度が原因。ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。エコーバックのテストでやたらと文字が化ける。