Naknet blog

Nothing to believe, nothing else to believe.

TOPPERS/ASPのサンプルプログラムが動かない件

国産組み込み向けリアルタイムOSとして、TOPPERSというものがあります。先日、秋月のH8/3069F LANボードを購入したのですが、付属のH8/OSがいかにも古く、また後継のものも既にSHシリーズに開発がシフトしているようだったので、TOPPERS/ASP 1.6.0の導入を検討しました。

以下は、うちの環境でサンプルプログラム(sample1)が動作するようになるまでの過程です。

開発環境

まず開発環境の構築です。せっかくならば開発環境も(対応する範囲で)最新のものにしたいと思い、まずはCygwinで構築を試みました。
一応gccもbinutilsもnewlibもビルド+インストールはできたのですが、色々と問題が発生してしまいました。

まず第一の問題は、コンフィギュレータ(cfg)です。ビルドが面倒だったので、公式サイトからバイナリを落としてきたのですが、うちのCygwin-1.7.9-1では起動しませんでした。

そこでソースからビルドしたのですが、まず、簡易パッケージに含まれていたcfgは、boostの最新バージョンに対応していません(native_file_string()がおかしい云々)。そこで公式サイトから別途ダウンロードしたものを使用したのですが、使用したboostのバージョン(1.48.0)が、公式で動作確認が取れているものより新しかったため、問題が発生しました。それは、boost::filesystemのpathが、パスの区切り文字をご丁寧に '/' ではなく '\' と認識するため、cfgが変なエスケープシーケンスを含んだC言語のソースコードを生成します。この結果、コンパイルが通らなくなるというものです。これに対しては、cfgを頑張って修正するか、出力されたファイル cfg1_out.c をsedで修正するくらいしか方法がありません。

次に、Makefileで最適化(-O2)が行われていたため、genoffsetが認識できない.Sが出力されてエラーが出てしまいました。
この対策としては、../configureした後にMakefileを手動で編集し、COPTSに-O2としている箇所を-O0とすれば回避できます。しかし、このようにするとmakeoffset.cだけではなくすべてのファイルで最適化が無効になってしまうため、makeoffset.cだけを特別扱いするような別の対策が必要と考えられます。

以上の修正によりsample1はなんとかビルドできました。しかし、これを苫小牧高専の簡易モニタ上で実行すると、"task1 is running (xxx)."という表示は出るのですが、キーを入力すると固まってしまうという現象が発生しました。

この現象は、調べてみると他の人も遭遇しているようでした。しかも全く別のCPUでも発生しているようで、全く原因不明でした。

調べた方によれば、文字入力があった後でmain_task()がdispatchされていないということらしく、カーネルのバグを疑いました。

OSの変更

ただ、単純に開発環境がいけないだけという可能性もあります。そもそも、単純にmakeするだけではだめで、色々とファイルの修正が必要になる(しかも汚い方法で…)時点でCygwinの限界を感じたため、新たにVM上にCentOS 6.0 (x86)をインストールしました。ここでx86_64ではgccがビルドできません。x86(i686)版でやる必要があります。そういうわけでOSを2回インストールした後、この上にgcc-3.4.6+binutils-2.16.1+newlib-1.19.0で開発環境を改めて構築しました。

付属の各種txtによれば、hms(Hitachi Micro System)形式ではなくelf(Executable and Linking Format)形式をターゲットに指定する(--target=h8300-elf)こともできるそうです。そこで最初はそちらで環境を構築することにしました。しかしながら、構築した環境でsample1をビルドし、RAMに転送して実行しようとしても、全く動きませんでした。おそらく別の個所の修正が必要になるんだと思いますが、面倒なのでh8300-hmsで環境を構築しなおしました。

Linux上ではboost::filesystemのパスの問題も起きず、修正もMakefileの-O2の部分だけでmake dependもmakeも通ります。というわけなのでこれから環境を構築される方はCygwinではなくネイティブのLinux OSを用いることをおすすめします。

それでも動かない

そこで改めてsample1をビルドして実行してみたのですが、やはりキー入力をすると固まってしまいます。タスク切り替えに問題があるのかとtest_task1を実行してみましたが、すべてpassします。同様にtest_sem1、test_sem2もpassします。

make cleanをしてからビルドなど色々やってみたのですが、解決しません。

warningが出ていた

何日かブランクを開けた後、ふと、make中に"warning: function called through a non-compatible type"が出ていることに気付きました。これはgcc-3.4から導入された機能で、別の型からキャストされて得た関数ポインタを経由して関数を呼ぼうとすると、問答無用で落ちるというものらしいです。

原因はこれでした。TOPPERSのカーネルでは、自動生成された割込みハンドラ(kernel_cfg.c内)でキャストした関数ポインタを使用して関数をコールしており、この部分でabortしていたのでした。生成された関数は、具体的には

void
_kernel_inthdr_53(void)
{
	i_begin_int(53);
	LOG_ISR_ENTER(53);
	((ISR)(sio_rx_isr))((intptr_t)(USER_PORTID));	// ← HERE
	LOG_ISR_LEAVE(53);
	i_end_int(53);
}

のようになっており、文字が入力され、受信され、割込みが発生するとこの関数内でabortしてしまいます。

対策としては、kernel/kernel.tfを次

818a819,821
> $             ///// gcc3.4 /////
>               $TAB$ISR fp;$NL$
> $             ///// /gcc3.4 /////
830c833,836
<
$TAB$((ISR)($ISR.ISR[order]$))((intptr_t)($ISR.EXINF[order]$));$NL$
---
> $             ///// gcc3.4 /////
>                       $TAB$fp = (ISR) ($ISR.ISR[order]$);$NL$
>                       $TAB$(*fp)((intptr_t)($ISR.EXINF[order]$));$NL$
> $             ///// /gcc3.4 /////

のように書き換え、コンパイラを欺くか、あるいはgcc-3.4以前を使用します。私は前者の方法を採りました。この修正により、生成されるソースコードは次

void
_kernel_inthdr_53(void)
{
    ISR fp;	// **
    i_begin_int(53);
    LOG_ISR_ENTER(53);
    fp = (ISR) (sio_rx_isr); // **
    (*fp)((intptr_t)(USER_PORTID));	// **
    LOG_ISR_LEAVE(53);
    i_end_int(53);
}

のようになります。注意点として、同様のkernel.tfはextension/ovrhdr/kernelとextension/mutex/kernelにもありますので、これらの拡張を使用する際にも同様の修正が必要になることが挙げられます。

これで無事に3系gccの最新版でsample1が動くようになりました。タスク切り替えもちゃんと動いています。

これだけで1週間は悩みました…。最初から動作確認が取れている環境でビルドしなかったのが悪いんですが、最新のコンパイラを使う際は気をつけようということで。

参考サイト

開発環境構築にあたって参考とさせて頂いたサイトです。

他にも「h8300-hms-gcc」などで検索すればたくさん出てきます。

comments (0) | trackbacks (0)

Digital Photo Frame Screen Saver (dpf.scr) v0.05

すごく久々の更新ですね。
Digital Photo Frame Screen Saverを更新しましたのでupします。

改善点は、

  • →キーかPageDownキーを押すと次の画像に進むようにした。
  • ←キーかPageUpキーを押すと前の画像に戻るようにした。
  • 上記キーを一度押すとスライドショーが停止します。
  • 上の状態でEnterを押すか、Windowsのスクリーンセーバーの待ち時間が経過すると再開します。
  • Exifのシャッタースピードの計算を改善しました。

Softwareからどうぞ。

comments (0) | trackbacks (0)

鉢呂発言

野田内閣が発足して一月も経ちませんが、鉢呂経済産業大臣が辞任しました。

鉢呂経産相が辞任 「死の町」「放射能」発言で引責

2011.9.10 21:26 (1/2ページ)

http://sankei.jp.msn.com/politics/news/110910/plc11091021270018-n1.htm

 鉢呂吉雄経済産業相は10日夜、東京電力福島第1原発事故の現場周辺を「死の町」と表現し、「放射能をうつしてやる」などと記者に発言した問題で、野田佳彦首相に対し、辞表を提出した。首相は辞表を受理した。

...

直接の原因は、上記の記事にもあるように、

  • 9/9の記者会見で「残念ながら(視察した福島県の東京電力福島第1原発の)周辺市町村の市街地は人っ子一人いない『死の町』だった」と語ったこと。
  • 同日の会見で、ある記者に対して更に「放射能をうつしてやる」などと(恐らく冗談めかして)発言したこと。

の二点です。

問題の記者会見はYoutubeにも上がっています http://www.youtube.com/watch?v=w-m-AMisBvg のでご覧ください。

この件について、佐藤優氏は以下のように語っています。

【佐藤優の眼光紙背】鉢呂経産相の『放射能をつけちゃうぞ』発言を野田佳彦首相が放置してはならない

...

ここには2つの問題がある。

 第1は、マスメディアは公器であるという認識が鉢呂氏に決定的に欠けていることだ。

...

マスコミは、本質において権力監視の機能を持っている。特に閣僚になると、記者との間で適用されるゲームのルールが変化する。それまでは、事実上、オフレコと見なされていた冗談や酩酊したときの発言であっても、ニュース性があれば報道される。こういうメディアの本質について無自覚な人に危機管理はできない。

...

第2の点もありますが省略します。

これはまさにその通りだと思います。一部の人は、

福島原発事故のせいでゴーストタウンになってしまったのだから、それをゴーストタウンと言って何が悪いのか。

http://news.livedoor.com/article/detail/5850197/

などと擁護をしているようですが、これは見当違いだということはすぐにわかると思います。というのも、経産大臣というのは経済産業行政を司るトップであり、例えそれが事実であって個人的な感想として思ったとしても、それを公の場で公式の発言として言って良いのか悪いのかの判断はするべきだからです。

自民党政権時代から、閣僚の発言の言葉尻を捕えて責任を追及する、ということはしばしば行われてきました。私の特に記憶に残っているのは、森総理大臣の「神の国」発言や柳澤厚生労働大臣の「産む機械」発言なんかですが、他にもやれ漢字が読めないだの何だのと、政策の本質には直接には関係ないところで随分と騒動が起きました。そういうことを散々経験し、また当時は野党として追及したのですから、不用意な発言をすれば同様に問題視されるというのは当然わかっていたはずで、脇が甘いとしか言いようがありません。要は危機管理ができていなかったということで、そこは疑いようもありません。

ここまでは前置きなのですが、この騒動について私が思ったことを書きます。

「死の町」発言も「放射能をうつしてやる」発言も同様に脇が甘いところから問題が出てきたのですが、特に後者について引っかかる点があるわけです。佐藤優氏は先ほどの記事内において、後者の発言は、鉢呂議員が大臣に就任する前から懇意にしていた記者との間でのやりとりにおいて出てきたもので、当然オフレコだと思っていたところを、記者のうち誰かが「漏らした」というものではないか、としています。そのような、仕事中ではあるけれども、記者会見なんかよりリラックスした場で、ぽろっと言ってしまったというのが真相でしょう。

ここの「ぽろっと」言ってしまったというのが問題で、そういうものは普段からそう考えていないと出てくるはずがないわけです。前者の「死の町」発言にしても同じです。何らかの災害Xで明日自分の町に人が住めなくなり、長期間(数年〜数十年?)離れざるを得ない、という状況になったことを考えてみてください。廃墟マニアの人はわかると思いますが、町や構造物は、人間が住まなくなったり手を入れなくなると急速に風化します。そうやって自らの町が朽ちていくのを、ただ見ているしかないわけです。こういう状況で、国のトップにそんなことを(わざわざ)言ってほしいという人はいないでしょう。こういう想像ができなかったのが根本的な原因です。

産経の阿比留記者も、blogにて

鉢呂経産相発言と福島からの手紙と政治家の言葉

http://abirur.iza.ne.jp/blog/entry/2436750/

...

先日、福島市在住の読者から私宛てに届いた手紙を思い浮かべました。

...

そして、東京の電車内で次のような会話を耳にし、怒ることもできないほど打ちのめされたというのです。私もショックを受けました。

「福島を東京のごみ置き場にしてしまえばいいのにね」「(そうしたら)年金も削られないかもね」

……軽口、冗談のたぐいなのでしょうが、やはり口にしていいことと悪いことがありますね。自戒も込めて言えば、想像力の欠如は罪だと思います。

...

と指摘されています。これに私も同感で、どうも「想像力」が欠如した人、あるいは、他人の立場になって考えてみる余裕がなくなっている人が増えているのではないかと思います。国政も景気も自分の生活も、うまく行っている時には見えなかった問題が、大規模な天災や不況といった状況の中で、少しずつ見え始めている。その一端だとではないでしょうか。

この問題以前にも、京都の送り火問題や、福岡県で福島の農産物を売ろうとしたグループに対してクレームが来た件がありました。送り火で当初燃やすはずだった薪からは放射性物質は検出されませんでした(後日改めて取り寄せたものからは検出)。また、わざわざ九州で売るくらいだから売り物の検査はするでしょう。しかも売る予定だったものは昨年収穫されたものだと言います。

そもそも微量・長期間の被曝による人体への影響の有無は、専門家の間でも意見が割れているところです。意見が割れるってことは統計的に明らかな事象は観測されていないわけです。これが、政府の言う規制値が「あいまいな」ものになる根本原因です。

広島や長崎は今「死の町」なのか?戦後の大気中核実験による放射性降下物の影響はどうだったのか。胸部X線撮影は?CTスキャンは?航空機搭乗による被曝は?ラジウム温泉に浸かった人は白血病で即死した?そもそもあなたが今吸っている空気にも放射性ラドンが含まれているけれど?
冷静に考えれば、微量の被曝は健康に実質的に何の影響も与えないのはわかるわけで、科学的根拠のない、ただ漠然とした「不安」を盾に、甚大な被害に遭われた方々を差別するような言動がなぜできるのか、不思議でならないわけです。

これにはもちろん、声の大きい一部の集団(反原発といった運動を職業とする人)の意向があるのですが、どうもそれだけではないらしい、というのが私が懸念しているところです。つまり、政府や専門家の言う「そんなに心配しなくていいよ」ということは信じないが、活動家や武田某といった人が言う「東北は汚染されてもうだめだ」みたいなことは信じるという人がいるのは問題ではないかということです。

これには、まずは人間の心理的な作用が原因としてあるのだと思います。経済産業研究所の関沢氏が、不安仮説という仮説を提案していました。

コラム:第278回

人間の心と感情は経済学の最後のフロンティアになるか

http://www.rieti.go.jp/jp/columns/a01_0278.html

...

以下の仮説(不安仮説)は、不安によって人間の行動が過剰にリスク回避的で不合理なものになるというものである。

...

ただ、心理に本質的にこのような作用があるのだとしても、それを理性で制御するのが人間です。もちろんきちんと制御できている人も大勢いる一方で、「感覚」に流されている人も大勢います。今の時代、ネットでちょっと検索すれば、専門家による放射性物質の危険性についての解説はいくらでも出てきますから、よくわからないなら自分で調べてみればいい話です。なのにそれをしない。全員が全員は自分では調べない。調べても理解することはできないというのは、頭ではわかりますが、現実はそんなものなのでしょう。

このような非理性的な「空気」に流されて何か重大な判断ミスをし、それが将来に禍根を残す結果にならないか。放射能なんかよりそっちの方が心配です。放射性物質を過剰に怖がるあまり、ヒステリーになって気がおかしくなってしまっては元も子もないわけです。これからの時代は科学の素養がないと生き残れないのかもしれませんね。

ここで冒頭の話に戻りますが、小学生のような悪ふざけをするくらいだから、鉢呂大臣自身も放射性物質の危険性について良くわかっていなかったのではないかと思うのです。仮定の話ですが、ある特定の集団が「反原発」「反核」運動を遂行するために被曝の人体に対する影響を誇張して宣伝した結果、いつの間にか自分たちも本気でそのように考えるようになったのではないか。そのような疑念が、想像力や理性といった問題の根の深さを考えるきっかけになりました。

comments (0) | trackbacks (0)

産経特集

産経のページは相変わらず特集が辿りにくいので、ここにメモします。

【ボーダー その線を越える時】

ソ連崩壊20年 解けない呪縛 [2011/8/23更新]

他にも面白かった連載

一定期間経つと削除されるので、必要な人は保存しておくとよいかと。

comments (0) | trackbacks (0)

ミスターLと産経・阿比留記者との対談

産経新聞の人気記者である阿比留氏が、師と慕う「ミスターL」との対談をblogで公開されていらっしゃいますので、謹んでリンクさせて頂きます。

新作(?)が公開されたら更新するかもしれませんししないかもしれません:-p

comments (0) | trackbacks (0)

Digital Photo Frame Screen Saver (dpf.scr) v0.03

dpf.scrですが、時間が経つとSystem.Graphics.Imageオブジェクトが(GC作動まで)リークして、愉快な量のメモリを消費して頂いていたので、Dispose()するように修正しました。

Softwareからどうぞ。

[4/13追記] 0.04に更新しました

  • デバッグ用にTopMostプロパティをFalseにしていたのを戻すのを忘れていました。
  • バージョンアップした際に設定がクリアされてしまうので、前バージョンで設定をしていた場合に、これを読み込むようにしました。
  • Exif情報で元画像のサイズを 'Size' としていましたが、これを 'Original Size' と表記変更し、更に実際の画像の大きさを 'Size' と表示するようにしました。
続きを読む>>
comments (0) | trackbacks (0)

Digital Photo Frame Screen Saver (dpf.scr)

新作です。

説明

Windowsにおまけでついてくるスライドショーのスクリーンセーバーは、マルチディスプレイで使うと上手く表示できないことがあります。

そこで、マルチディスプレイ対応の、スライドショーのスクリーンセーバーを作りました。

名前はずばりです。随分高価な写真立てですね(棒)

ただ表示するだけじゃ面白くないので、画像のExif情報を取得して表示できるようにしてみました。

続きを読む>>
comments (0) | trackbacks (0)

EMF to EMF+ Converter

GDIベースのEMF(/WMF)ファイルを、GDI+ベースのEMF+ファイルに変換するプログラムを作りましたので公開します。

emf2emfp-0.01.zip

使い方

emf2emfp <input file> <output file> [<png file> [<target dpi>=300]]

コメント

従来のGDIベースのEMFファイルは、普通にレンダリングすると、アンチエイリアスがかからずに汚くなってしまいます(画像左)。

しかし、GDI+ベースのEMF+ファイルの場合、GDI+のアンチエイリアス機能を使うことができますので、美しいレンダリング結果が期待できます(画像右)。

具体的には、画像のような効果があります。

BSch3Vという回路図CADの出力するEMFファイルを印刷物に載せる必要があったので作りました。

おまけとして、出力されたEMF+ファイルをpng画像に任意の解像度でレンダリングして出力する機能をつけました。オプションで指定してください。既定では300dpiにしています。

注意

出力ファイルは警告なしで上書きされますので、注意してください。

GDI+ Version. 1.1を使っています。恐らくWindows XPで.NET Framework 1.1以上が入っていれば動くはずですが、gdiplus.dllがどうのこうのというエラーが出た場合は、これでどうにかするか、あるいはご報告ください。

→Windows XPはGDI+ 1.1はサポート外だそうです。
参考:http://connect.microsoft.com/VisualStudioJapan/feedback/details/416474/gdi-gdipver-msdn

Vistaとか7だと何もしなくても動く気がします。

開発環境

  • Windows 7 Professional 64bit
  • Visual C++ 2008
comments (0) | trackbacks (0)

太陽光発電でCO2 -25%は可能か

「世界最大級メガソーラー発電所、関電が起工式 一般供給で国内初」
http://sankei.jp.msn.com/life/environment/091124/env0911241244000-n1.htm

とあります。
最近、太陽光発電でCO2を減らそう的なお話を良く聞きますが、本当にそれが可能なのかというのを検証したのが、「電気管理技術2009年8月号」掲載のこの記事↓
http://www.engy-sqr.com/media_open/others/itou090919.pdf
(「エネルギー会」ホームページ http://www.engy-sqr.com/index.html に掲載)

要旨は、

  • 自然エネルギーで従来のエネルギーを代替するには、
    1. 量の限界
    2. コストの限界
    3. 質の限界
    4. の3つの限界があり、容易ではない。
  • 発電時にCO2を排出しないエネルギー源として、原発の利用を再考すべきだ。

となっています。

実際、冒頭の太陽光発電所では28,000kWの発電量があるとされていますが、この間の中越地震で被災し、設備が未だに止まっている柏崎刈羽原発は、原子炉1基で定格1,356,000kW(6,7号機)、7基すべてが稼働すれば82,120,000kWの発電量がある計算になり、文字通り桁が違うわけです。しかも太陽光発電は一日のうち数時間しか発電できません。

国内に広大な砂漠があるなど、人が住んでいない土地が大量に余っているというのなら別ですが、日本にはそんな土地はありません。山を切り開いてしまえば、CO2を吸収する森林を失うことになります。

実際、一度は「脱原発」に動いた欧州でもこれを見直す動きがあるとのこと。
太陽光発電と聞くと夢のエネルギー的な語感がありますが、過度な期待はせず、現実的なエネルギー政策を採る必要がある、という話でした。

comments (0) | trackbacks (0)

IYHの日々

最近IYHしすぎなので、自戒の意味を込めて、今年IYHしたものをリスト化。

今年後半の主なIYH

  • [9/29] Sapphire RADEON HD 5870 (1GB GDDR5)
    • 新型が出るということでIYH。$379.99+$43=$422.99≒38k
  • [10/13] Antec P183
    • VGA買ったら新しいPCだろうJK。ケースどーすっかなー。P183がきになる!ふしぎ!ということでIYH。17k
  • [10/13] AMD Phenom II X4 955 BE BOX
    • Corei7高いし、たまにはAMDもいいだろうということでIYH。19k
  • [10/13] Gigabyte GA-MA790XT-UD4P
    • VGA積むから785の内蔵グラフィクスはいらねぇなということでIYH。14k
  • [10/13] Sanmax SMD-4G88NP-13H-D
    • メモリはケチらず秋刀魚を積もうということでIYH。11k
  • [10/13] Seagate ST31000528AS
    • 当時は東芝SSDが出ていませんでした。8k
  • [10/13] Pioneer DVR-217J BK
    • πのドライブってどうなの?ということでIYH。5k
  • [10/13] Antec TruePower New TP-650AP
    • 前は江成電源だったなァ。次はAntecにすっかということでIYH。14k
  • [11/4] RATOC SA-RC1A-LGS
    • HDDの整理がなってないのでIYH。二つで12k
  • [11/5] Scythe SCKBT-1000 「兜」
    • リテールファンうるさすぎ…。3k
  • [11/21] Mitsubishi Diamondcrysta Color RDT241WEX
    • 地図で連休特価\49800+10%還元を発見し、次の瞬間にIYH。50k

合計191k

頭おかしい。

今後のIYH計画(懲りない)

  • ST31000528ASをリプレース
    • カッコンプチフリうざいっす。日立7K1000.Cの1T HDS721010CLA332 の在庫が復活したらIYH?それともSSDN-ST64B!?

物欲は尽きない。。。

comments (2) | trackbacks (0)
1/33 >>