2013年12月 9日 (月)

MEGA-1284P Xplained と JTAGICE3

久しぶりにblogを更新します。

更新していなかったということは、その間趣味のロボット開発が一切行われなかったことを意味しています。100kmウォークに参加したり、放送大学で講義を受けたり、朝8:30から夜9:45まで仕事したりと、家に帰ってから図面を引いたりプログラムを書いたりする余力のない日々を送っています。

それでも、マイコンいじりたい病が発症しまして、AVRのMEGA-1284Pをマイクロマウスに使ってみたくて、MEGA-1284P Xplainedという評価ボードと JTAGICE3という安価なJTAGデバッガを購入しました。先週末あたりに評価ボードをAtmel Storeから注文したのですが、その週の木曜日にはもう届いてしまい、今週はその火入れ式を兼ねて hello world 的 LED点滅プログラムを書いてみました。

プログラムを書いてみた中で幾つか困ったことがあったので覚書として書いておきます。

まず、Xplaied のサンプルプログラムが AVR Studio 4用であり、AVR Studio 6 (略してAS6) では動きません。これではサンプルプログラムの役を果たしません。Atmelさん、なんとかしてください。

それから、AtmelはAtmel Software Framework (略してASF)を提供しているのですが、AS6のASF ExplorerでAPI Documentationを読もうとすると、リンク切れになっていて読めないものが多数あります。使い勝手が悪すぎます。

さらに、JTAGICE3でデバッグする際、break pointを設定してもうまく停止してくれません。META-1284Pのデータシートを読むとbreak pointをサポートしていることが書かれているのですが、breakできない。この辺りはセキュリティ上デフォルト設定でなにかがdisableされているようで、この辺りにヒントがありそうです。

http://www.atmel.no/webdoc/jtagice3/jtagice3.special_considerations_mega.html

http://www.avrfreaks.net/modules/FreaksArticles/files/17/Guide%20To%20Understanding%20JTAG%20fuses%20and%20Security.pdf

こういうのって、見つけにくい所に書いてあって気がつかないんですよね。よく読んでbreak pointが正しく動くようになったらまた報告します。

2013年2月11日 (月)

全科履修生になろうかな

放送大学の期末試験も終わり、次は何を受講しようかなぁと物色していたところ、放送大学の事務局から電話がありました。

「来期はどうするの? 何か困ってることある?」みたいな電話だったのですが、その中で「毎年選科履修生として登録すると1年ごとに入学申請しなきゃいけないのが面倒。なんか手はない?」と質問してみたところ、「全科履修生になれば10年は在籍できるよ。卒業を目指さなくてもOK。手続きに高校の卒業証書のコピーが必要だから探してね。」という回答。なるほど、卒業目指さなくても良いんですね、全科履修生でも。

私の場合、完全に趣味の生涯学習(+仕事の足しになればそれでOK)で講義をつまみ食いしているだけなので、今更大学を卒業する気はありません。去年、大学院レベルの講義を1年間みっちり受けてきたばかりだし。良いこと聞いたので、これから実家に高校の卒業証書のコピーを送ってもらえるようお願いしようかな。

2012年12月15日 (土)

Visual Studio 2010でBoostを使う

久しぶりにBlogを更新しますが、これは完全に自分のためのメモです。

Roomba Hack をするのに、PC上のプログラムからシリアル通信でRoobaにコマンドを送りたい。開発環境はVisual Studio 2010を使うという前提で、シリアル通信するにはWin32 APIを叩くか、.NET FrameworkのSerialPortクラスを使うか、Boostライブラリのserial_portクラスを使うか。迷った結果、移植性を考えてBoostライブラリに決めました。で、これはその作業メモです。

まずBoostをダウンロードして、インストールする。配布もとはここです。バージョンは最新版である1.52.0を選びました。インストール方法は、基本的にインストーラをダブルクリックするだけなのですが、オプションとしてマルチスレッドライブラリにするか、デバッグをサポートするかなどがありました。私はCドライブにOSを、Dドライブにプログラムをインストールするようにしているので、Boostのインストール先はD:\Program Files\boost\にしました。ライブラリのサイズが大きい(私が選んだオプションで1.48GB程度ある)ので、インストールにも多少時間がかかります。

続いてVisual Studio 2010側の設定。とりあえず適当なプロジェクトを作り、Boostのインクルードディレクトリとライブラリのパスを設定します。Visual Studio 2010では「ユーザープロパティシート」なるものでコンパイラやリンカのスイッチ、ユーザマクロ定義を行うようです。プロパティシートは、[表示]メニューの[プロパティマネージャ]から作成します。そうするとプロパティマネージャがソリューションエクスプローラのあった場所に表示されるので、プロパティマネージャで先ほど作成したプロジェクトを右クリックすると、[新しいプロジェクトプロパティシートの追加]が表示されます。これを選んで、[構成プロパティ] → [VC++ディレクトリ]で、インクルードディレクトリに D:\Program Files\boost\boost_1_51; を、ライブラリディレクトリに D:\Program Files\boost\boost_1_51\lib; を追加しました。とりあえずこれでBoostを使う準備が完了しました。

2012年8月11日 (土)

外出先から自宅PCを操作したい

自分用のメモです。今までメインで使用してきたノートPC(Let's Note)、液晶ディスプレイのバックライトが死んでしまったので、部品を集めて新しいPCを1台組み立てました。OSやアプリのインストール、環境設定もほぼ終えて普通に使えるようになりました。

さて、これからお盆休みで帰省したいのですが、液晶ディスプレイが死んでしまったノートPCなど持って帰っても意味がない。そこで、そのノートPCを購入する前に使っていたノートPC(dynabook)を持って帰って、そのdynabookから新しいPCをリモートデスクトップで操作することを考えました。しかし、固定IPじゃないのにどうするんだとか、ファイヤウォールをどうやって通すんだとか、いろいろ難しいようです。

そんななか、ITPro でこんな記事を見つけました。

 ITPro Windows 7実践ナビ 外出先からWindows 7パソコンをリモート操作する

これですよ、私が望んでいたのは。要するに、MicrosoftのWindows Essential の、Windows Live Mesh というサービスを使えば、私の望んでいることができそうな予感。操作される側のPCに Windows Essential 2011 をインストールしておき、操作する側のPCではWindows Essential 2011をインストール済みならばインストールした 「Windows Live Mesh」 から、そうでない場合はInternet Explorer を開き、Devices の Web サイトにログインして外出先から自宅PCを操作することができる、ということのようです。

遠隔地から操作するとタイムラグはどうなんだろうとか、セキュリティ的にはどうなんだろうとかいろいろありますが、古いdynabook (CPU clock 1.0Ghz, RAM 1.0GB)でもこれが本当に動くのか、実家に帰る前に試してみます。

-------------------------

(追記) 残念なお知らせです。 Windows Essential 2012 では Live Mesh が提供されていないようです。せっかくインストールしたのに!

2012年6月16日 (土)

資産ポートフォリオのリバランス計算

インデックス投資を行うにあたり、ポートフォリオを組んでいる方が多いかと思います。そして、月に1回なり半年に1回の割合で、ポートフォリオのリバランスを行なっているかと思います。

しかし、リバランスを行おうとすると、どの資産クラスをいくら分買い増ししたら目標比率に近くなるのか、手計算で行おうとすると結構厄介です。いままではかなり適当に買い増しをしていたのですが、まじめに計算するとどうなるかと思って、Excelでリバランス計算シートを作ってみました。

ポートフォリオリバランス計算シート ダウンロード revalance_calc_sheet.xlsx (26.1K)

取りあえず使えるものにはなっていると思います。Excel 2007 で作成したため、ソレより古いバージョンのExcelでは動かないかもしれません。計算結果に「あれ?」っと思うことがあっても、それは仕様です! ・・・と言い逃れさせて下さい。

2012年4月19日 (木)

Visual Studio 2010 で Open Dynamics Engine を動かす

春の情報処理技術者試験も終わったので、そろそろロボット開発を加速させて行きたいところです。それでですね、マイクロマウスとは直接関係ないのですが、フリーの物理計算エンジンであるOpen Dynamics Engineに前から興味がありまして、今日はその ODE を Visual Studio 2010で動かすことにチャレンジしました。

やり方は Visual C++ 2008 Express Edition と一緒なのでココを見ていただければインストール方法が書いてあります。私が付け加えることは何もありません。ODEの最新版であるODE v0.12 の premake では VS2008 までしか対応していないので、premake では vs2008 用のプロジェクトファイルを生成しておいて、Visual Studio 2010 で開けば変換を勝手にやってくれます。ODEについて来たデモプログラムのビルドと実行は何の問題もなく出来ました。

デモプログラムの次は、hello world 的な「リンゴの落下」プログラムをに挑戦してみます。

2011年12月16日 (金)

般若心経ロックと黄色訳の衝撃

facebook上で友人がとある記事を取り上げていて、私も見てみたら衝撃的だったので自分用にメモしておく。

まずはこれ。般若心経ロック。

で、これの黄色兄貴がつけたラップ調の超訳がすごい。これをまとめてくれたのがこちら。

http://dic.nicovideo.jp/v/sm11998050

こういうのは正確な役である必要性はなくて、ノリでだいたいあってればOKなんだけれど、とにかく訴える力を感じたいい超訳だと思う。

もっかい聞こうかな。

2011年3月27日 (日)

家庭用 災害時行動マニュアル

mixiの災害関連コミュニティで、阪神淡路大震災の被災経験者等が被災時はどのように行動すればよいか、避難時に役立ったものなどを紹介しています。こういう機会に、自分で何を備えておけばよいかまとめておこうと思いました。そう思ったのですが、そういうのは既に誰かがやっているだろうと思い直してささっと調べてみたところ、世田谷区がそういうマニュアルを整備してくれていることが分かりました。役に立ちそうなのでここで紹介しておきます。

災害時区民行動マニュアル(世田谷区)

このマニュアルで網羅されていないけれど、私としては必定なんじゃないかと思う事項を挙げておきます。

  • 家族・親戚・友人と安否確認手段を取り決めておく(相手にそれを知らせておく)
  • 自分が死亡した場合に連絡するべき相手をグループごとにリストにしておく。
  • 普段すべき教育として、災害対策の講習会や応急手当の講習会に参加する。

災害が起きてから準備したのでは間に合わないことがおおいので、平時に準備しておくことが大切ですね。

2010年9月28日 (火)

DLLを読み込めないという問題(3)

さらに続きです。ちょっとだけ進展がありました。

まず、UrgLibDll.dllがReleaseモードでなぜうまく動かなかったのか解明できました。それは、Releaseモードのリンカの入力設定で、モジュール定義ファイルが空欄になっていたことが原因でした。Debugモードではちゃんとモジュール定義ファイルを指定していたのにReleaseモードでは指定していなかった。だから、ReleaseモードでビルドしてできたDLLは、公開すべき関数をExportできていなかった、というわけです。

上記の修正で作りなおしたUrgLibDll.dllを制御用PC上にもっていき、Dependency Walkerで依存関係を洗ってみたところ、また別の問題を見つけました。それは、制御用PCにVisual C++ 2005再配布可能パッケージをインストールしたはずなのに、MSVCR80.DLLが見つからないという問題です。今思えば、インストールが始まる感じはあったのに完了したという通知がないままダイアログボックスが消えてしまっていたので、インストールがうまくいっていなかったようです。そこで、こんどは再配布可能パッケージ(SP1)をインストールしてみました。はい、今度はインストールが終わった後にPCの再起動を求めてきました。おそらくインストールできたのだと思います。

制御用PCを再起動したのち、Depedency WalkerでUrgLibDll.dllの依存関係を解析しなおしてみたところ、不足しているDLLからMSVCR80.DLLが消えました。

これで解決できていることを願って、新しいUrgLibDll.dllを制御プログラムのディレクトリに入れてからプログラムを起動してみたところ、今まで出ていた例外がでなくなりました。そこから先は未確認ですが、とりあえず一歩前進です。(EFSADU.DLL、IESHIMS.DLL、WER.DLLは無くても動きそうですね。)

2010年9月27日 (月)

DLLを読み込めないという問題(2)

昨日の続きです。そもそも何がおかしいのか、丹念にエラーメッセージを追うことにしました。

制御用PCでプログラムが吐きだした例外のメッセージは次のようなものでした。

System.DllNotFoundException: DLL 'UrgLibDll.dll' を読み込めません: このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (HRESULT からの例外: 0x800736B1)
   場所 UrgLib4CS.UrgLib._urg_initialize(urg_t& urg)
   場所 AIModule.Device.LaserRangeScanner..ctor()
   場所 AIModuleApp.Form1.Form1_Shown(Object sender, EventArgs e) 

(以下省略。)

プログラムのカレントディレクトリにUrgLibDll.dllを配置しているのにそのDLLを読み込めない、というのが問題点なわけです。ここでの議論から、必要なDLLが足りないとDllNotFoundExceptionが発生するということなので、昨日は「開発用PC上で」Depenency WalkerでDLLの依存関係を調べて、IESHIMS.DLLが足りないという結論に達しました。

しかし、ここに落とし穴を発見。開発用PC上でDLLの不足を探しても意味ねーじゃん? そう気づいたので、制御用PC上でDependency Walkerを実行してみました。ちなみに、ここから手に入ります

その結果、次のDLLが見つからないことがわかりました。

ここで注目すべきは、MSVCR80D.DLLです。”D”が入っていますね。これはUrgLibDll.dllがDebugモードでビルドされたことを示しています。Relseaseモードでビルドしたらうまく動かなかったのは昨日の日記に書いたとおりです。デバッグ用のMSVCR80D.DLLを必要としているのであれば、VC++ 2005の再配布可能パッケージをインストールしても動かないのは納得できます。

ちなみに、EFSADU.DLLはNTFSのファイル暗号化に関するDLLのようです。IESHIMS.DLLとWER.DLLは、インターネットで検索するとその二つのファイルが見つからないという書き込みが山ほどでてきます。

上記を踏まえて試してみるべきこと。

  1. UrgLibDll.dllをReleaseモードでちゃんと動くようにする。(Releaseモードで動けば、依存関係がMSVCR80D.DLLからMSVCR80.DLLになるはず。)
  2. 制御用PCにVisual Studio 2005を入れる。

後者のほうが手っ取り早いかな。

最近の写真