June 04, 2007RubyによるHEXフォーマットの読み書き組込み系の開発をしているとROMにデータを書き込むためのバイナリを扱うことになりますが、そのフォーマットの一つにHEXフォーマット(正式名称?)というのがあります。バイナリを0からFまでの16進文字で表したものなのですが、モトローラ仕様とインテル仕様、2つのものがあります。その相互変換をしたいなと思ったのですが、せっかくなのでRubyで組んでみることにしました。 hex_binary_format.rbライブラリを公開します。使い方はHexBinaryFormat.readとHexBinaryFormat.writeを適当に呼べばなんとかなる(笑)と思います。 参考にしたのは、Googleで『HEXフォーマット』をキーワードに検索して引っかかった『HEXファイルフォーマット』と『ROM化ファイルについて』のページです。作成にあたってはRubyのArrayを活用していますが、インデックスが現在のサイズを超えている場合に自動的にnilで埋めてくれる機能が非常に便利でした。 ※C++でHEX形式を読み込むローダを作ったりもしています。 June 10, 2007USBでMSD+CDC (Composite Device)このサイトで扱っているGPSロガーやオートパイロットシステムSuper Sylphideには、USBが内蔵されたC8051F340というマイコンを搭載しています。これまではそれらに搭載されたSDカードの読み書きをPCから行うためにUSBを利用してきました。その際に実装として利用してきた規格がUSBのMass Strage Class(MSD)なのですが、今後はPCと双方向でやりとりできるコンソール機能をCommunication Device Class(CDC)という規格を利用して付け足したいと考えています。USB規格の詳細は本家usb.orgにまとめられています。 そういうわけでMSDとCDCの両機能をもつファームウェアの製作を考えているのですが、ただ単純に足してできるものなのか疑問を感じていました。USBの規格に則ってファームウェアを作成する際にはDescriptorというものを書くのですが、それは大きく分けて階層順にDevice、Interface、Endpointの3つがあります。この階層が曲者で、MSDはInterfaceレベルで定義されているのに対し、CDCはDeviceで定義されているため疑問を感じていました(図1)。 調べてみると、そのような議論がMicrochip(PICのメーカ)のフォーラムでされていた("USB Composite Device Operation")ので、そこでの議論をまとめて図にしてみました(図2)。どうやらより大きな階層のDeviceで定義されているCDCに、より下の階層であるInterfaceで定義されているMSDを取り込めばよいようです(1)。あるいは新たに設けられたInterface Association Descriptor(IAD)という機能(詳しくはusb.org内のPDF)を使って、Interfaceの階層でDeviceの定義をすることによって解決することもできるようです(2)。 実装はこれからといったところですが、疑問が解消されてよかったです。 ※その後、WIndowsでMSD+CDCを試しました。それに伴い図2に不備があることがわかりましたので、修正しました。 June 14, 2007epsをまとめてPDFにするRubyスクリプト
[Computer]
表題のとおりの内容です。最近epsで作ったグラフが氾濫するようになりました。この管理方法について頭を悩ませているところです。というのも細かな違いしかないファイルが大量に生産されている故で、これではコンピュータ上で表示されるサムネイルによって中身を完全に把握することができません。 そこでレガシーですが、紙にepsファイルを一覧を印刷することにしました。手動でやっていたのでは『楽をするために一層苦労をする』というポリシーに反しますので、当然Rubyで自動化します。せっかくなのでTeXとdvipdfmxの協力も得てPDFにすることにしました。 できたスクリプトはfigures2pdf.rbです。実行時ディレクトリにあるepsファイルを全て取り込み、TeXファイルの生成、その後dvipdfmxによってPDF化されます。元の雛形となるTeXファイルはスクリプト内に内蔵しており、これを改造することでお好みのフォーマットで一覧を作れると思います。そのままでは横に2列でグラフが表示されます。また利用に当たってはRubyの用意は当然のこと、platexとdvipdfmxにパスを通しておく必要があります。 これでepsで綺麗なグラフを心置きなく製造できるようになりました。グラフの内容はともかくとして(笑)。 June 18, 2007Super Sylphide 進捗状況(5) -- DSP基板データ公開オートパイロットシステム Super Sylphideですが、メインとなるDSP基板の動作確認がほぼ完了したので、そのDSP基板データを公開します。 動作確認の工程ですが、以下の手順を踏みました。
ということで外部のSDRAMやFlash ROMも含めてほぼ動作確認がとれました。 次はFlash ROMを書き込むツールであるFlashBurnを利用して、Flash ROM書込みができるか検証を行う予定です。FlashBurnはもともと純正のDSP Starter Kit(DSK)での利用を考えて作られているため、今回のようにオリジナル基板ではROM書込みの方法が定義されているターゲット側のプログラム調整を必要があります。しかしこの基板はDSK6713と利用している部品はほぼ同じなので、こちらも難なく成功する予定です。 ※その後、配線を改善した新モデルを作りました。 June 21, 2007Rubyでメールの仕分け
[Computer]
とある事情で大量のメールの仕分けをする必要がでてきました。仕分けといってもメーラーによって行われる単純なルール(例えばアドレスがhogeだったらadaフォルダに保存する)で解決できればよかったのですが、本文中に含まれる50個程度の指定語句(5から6桁の数字)に従って仕分けを行うという作業です。 ブツは例によってRubyでこしらえることにします。メールを扱うRubyのライブラリがないか探してみると、TMailというのが様々なメール形式に対応しているようで使いやすそうなので、これを利用することにしました。 TMailですが非常に細かいところまで気が配られていて、1通ごとのメールのヘッダや本文、添付ファイルの処理だけではなく、メールをまとめて管理する枠組みであるメールボックスについてもUNIX系のqmailやMaildir形式に対応しているようです。ただし今回、対象となるメールはすべてM$謹製のOutlook Expressで保存されたメールでしたので、直接メールボックスのままTMailでメールを扱うことができませんでした。しかしOutlook Expressのメールをドラックアンドドロップでウィンドウ外に保存すると、実はTMailでも対応しているMh形式の1通ごとのメールになりますので、あとはこれを処理して目標を達成しました。 TMailの使い方ですが、以下のような感じでコードを書くと、色々とメールの処理が行えます。 require 'tmail'
require 'nkf' mail = TMail::Mail::load('from_outlook_express.eml') # 件名の取得 # 本文の取得 作ったスクリプトはmail_sorter.rbです。こちらも参考にどうぞ。 |
かれんだ~
スポンサード リンク
|