May 03, 2011

HEX形式を std::iterator で

バイナリイメージを扱う単純なフォーマットとして、HEX形式というものがあります。起源はとても古いのですが、現在でもマイコンの書き込み形式としてなとで使われています。最近、ROMへの書き込みといった少々複雑な機能をもつブートローダを作る必要があり、この形式の読み込みをサポートすることにしました。なお以前こちらのサイトでは『RubyによるHEXフォーマットの読み書き』という記事でHEX形式について取り上げましたが、今回はRubyではなくC++で実装することにします。

HEX形式は1行単位で意味が成立している形式です。ということで行指向でパース、もとい解釈を行い、それをC++の標準的な繰り返しであるiteratorとして解釈した結果を返却することにしました。行単位で逐次処理をすることで、省リソースを実現できます。またiteratorとして実装すると、他の標準的なライブラリと調和がとりやすくなるという利点がうまれます。

実装した結果はhexfile.hです。テストコード(hexfile_test.cpp)で機能確認を行いました。さらにcodepadを使って、これらのファイルを実行した結果も載せておこうと思います。

なおHEX形式としてはインテルHEXモトローラSレコードの2形式がありますが、その両方に対応してあります。

20:50 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/799

May 10, 2011

2011 鳳凰三山より富士山

先日思い立って、鳳凰三山に登ってきました。天候はとてもよく、富士山が綺麗に見えました。

2011houou_fuji.jpg
Xactiで撮影。

雪はとても残っていました。昨シーズンはあまりスキーにいけなかったので、春山で雪を堪能してきました。といっても踏み抜きは危険なので堪能できる類のものではありませんが(笑)

22:01 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/800

May 17, 2011

newで作った複数種類のリソースを自動deleteしたい

楽しいプログラミング言語は? と聞かれたら迷わずC++をあげたくなるこの頃ですが、ハードウェアが絡むプログラムをC++で組んでいる際に、表題の問題に出くわしました。すなわち、様々なリソースを新規作成(new)したあと、これをほったらかしにしておくとデッドロックが発生したりメモリが溢れるので、いらなくなった時点で消したい(delete)というお話です。C++でうまく組めば、あたらにnewで作成したリソースを手動で制御せずとも、いらなくなった時点(スコープから外れた時点)で自動的にdeleteしてくれるようなコードが組めるのでは、と思いやってみました。


テクニックとして、リファレンスカウンタとデリゲートパターン(has-a関係)、純粋仮想関数を用いたインターフェイスを使っています。has-a関係は継承のis-a関係よりも遥かに使いやすく、僕がコーディングするときにはいろいろなところで活用しています。

なおこのコードですが、小型オートパイロットシステム TinyFeatherのリソース管理で活躍しています。kernel.hkernel.cppには上記のコードをアレンジして入れこんであります。

※普通のPCが対象でしたら、おとなしくboostをインストールしてshared_ptrを使ったほうがいいと思います、とのこと。

21:36 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/801

May 24, 2011

Freescale の Cortex-M4 を注文してみた

ここ数年ですが、僕が使いたいと思う組み込みプロセッサは、浮動小数点演算が速く実行できることが絶対条件になりつつあります。固定小数点を使えば確かに安価なプロセッサやマイコンでもいろいろなことができるのですが、桁あふれやスケーリングといったことを考えるのが苦手なので、もうここは金持ち主義でいきたいと思います。というわけでTIの浮動小数点DSP C67xを今まで使ってきたのですが、Renesas SH-2Aを筆頭にマイコンと呼ばれているものにも浮動小数点演算がハードウェアとして実装されるようになってきました。そして最大勢力のARMにもマイコンレベルに浮動小数点がおりてきました。Cortex-M4です。

ふらふらとDigiKeyを検索してみると、なんとFreescaleのCortex-M4実装のKinetisシリーズ買えるではありませんか。製品になる前のプレビューの状態のようでしたが数個、早速購入してみました。基板をおこすなりして、時間をかけて遊んでみようと思います。

Freescale以外にもCOrtex-M4実装はNXPSTMicroelectronicsをはじめとして、いろいろなベンダであるようです。各社、どのような差別化をはかってくるかも楽しみなところです。

※下のコメントでもご指摘いただいているとおり、上記のものにはFPUが入っていません。そしてとうとう、STMicroelectronicsの実装でFPU入りのもの(Cortex-M4F)が購入可能になりました。

22:56 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (8) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/802