« 2007年09月 | メイン | 2007年11月 »
2007年10月31日
Wordとか書式とか
とある助成金の申請書を書いていて、書式のWordファイルをとってきて、それに書いていく形で提出したのに、フォントサイズが違う、とか、ページ番号がついていない、などと文句をつけられ、再提出を求められた。しかも締切1時間前。
てめえのところにおいてあって、これを使えと指示のあった雛形のWordファイルをそのままつかったんじゃボケーーーーー
Wordをしっかり勉強せえ。
薄型CRT(続)
ちょっと手が空いたので、一気に物理モデルを立てて、シミュレーションをしてみる。
画面サイズ1mぐらいで、厚さ10mmぐらいは余裕でいけそうな雰囲気だ。
なんか実はすごいことなんじゃないだろうか。
もう少し詳細をつめてみることにする。
2007年10月30日
PCの使い方と作業効率
PCの使い方(ツールとか操作とかの意味)、というのは、人それぞれで個性がある。
が、その効率のよしあしで、同じことをやるのにも、手間がずいぶん違うようだ。
いらないことに時間を割くのはもったいない。
PCの使い方で時間をとられるのは本末転倒なわけで、そこは自分の手になじむ、手足のように自由に扱えるものが理想的。
というわけで、自分なりの、PCの使い方のポリシーをまとめてみる。(※は自分の場合)
1. ファイル操作とテキスト編集は、非常によく使う。だから、好みの手になじむ専用ツールを用意したほうがいい。
ファイル操作:ファイルの移動、コピー、名前の変更、削除など。
Windows標準のExplorerが不便なところ:(1)フォルダの一覧をみながらのファイルのコピーができない、(2)テキストファイルの中身をちょっと見たいだけのときに、*.txt以外は開くためのアプリケーションを指定しないといけない。へたをすると*.cを見るだけでVisualStudioが立ち上がる。
多くの専用ファイル操作ソフトでは、両者が内蔵されている。ただファイルの中身をちょっと見るだけ、というのは、意外と多い。
※ファイル操作ツール(ファイラー)=卓駆、テキスト編集ツール=Meadow(Emacs)
2. ウインドウは、できるだけ重ねない。
ウインドウを重ねても、結局同時に見られるのは重なっていない部分だけ。裏側のものを見るたびにウインドウを移動したり閉じたりするのは、効率が悪い。できるだけウインドウの重なりを少なくするように整列して配置したほうが格段に効率がいい。裏側にあるウインドウを表に持ってきたいときは、他のウインドウを移動すると、元に戻すのが手間なので、Alt+Tabで切り替える。
※左側にテキストエディタとメールソフト、右側にWebブラウザとファイル操作ソフト、AdobeReaderを並べる:WebページやPDFを見ながら文章を書くことは、意外と多い。
3. デスクトップに、あまりファイル置かない。
デスクトップにファイルを置くと、そのファイルを使うたびに、多くのウインドウを閉じたり移動しないといけないのが、けっこう作業の中断になっている。ファイルはフォルダに置くのが便利そう。ただしタスクバーに「デスクトップ」を置けるので、そこからアクセスするのはいいかもしれない。
「慣れ」という要素は大きいと思いますが、ぜひお試しあれ。
LPC2888(続続)
今日も合間をみて、LPC2888。
I/Oポートの1ビットを変えるだけで1us近くかかる件。でてくるアセンブルコードは、EWBのProjectのOption内の、C/C++ Compiler→Listの、Output list fileをチェックすればOK。
MODE0_2_bit.P2_1 = 0; という1行が、次のようなアセンブルコードになっていた。
----
MOV R0,#-2147483632
ORR R0,R0,#0x3080
MOV R1,#-2147483632
ORR R1,R1,#0x3080
LDR R1,[R1, #+0]
BICS R1,R1,#0x2
STR R1,[R0, #+0]
----
これはすごい。ありえないぐらい冗長。と思ったけど、asm()で直接アセンブルコードを書こうと思っても、なぜかMOVでは、即値で0x80003090などを代入できない(out of rangeと出る)ようだ。なんでだ?
それはともかく、LPC2888のIOポートは、特定ビットだけをset/resetするためだけのレジスタというのがある、不思議な構成になっているので、そいつを使ってみる。
MODE0S_2 = 0x02; としたら、次のようになった。
----
MOV R0,#-2147483628
ORR R0,R0,#0x3080
MOV R1,#+2
STR R1,[R0, #+0]
----
さっきのよりはまし。これで500nsぐらい。それでもやっぱり1命令あたり100ns以上かかっている。なんでだろう?cacheをonにしてないから、こんなものなのか?
次。UART。こんな関数を書いてみる。
----
void UARTinit()
{
LCR = 0x83; // enable access to Divisor
DLL = 78; DLM = 0x00; // (12MHz/16) / 78 = 9600bps
LCR = 0x03; // N81
MODE0_6 = 0x0f;
MODE1_6 = 0x0c; // TXD(P6.1) & RXD(P6.0) enabled
}
void UARTputc(unsigned char d)
{
while(_LSR_bit.THRE == 0); // wait for transmission ready
THR = d; // transmit data
}
unsigned char UARTgetc()
{
unsigned char d;
while(_LSR_bit.RDR == 0); // wait for data receive
d = RBR;
return(d);
}
----
ポーリングだし、ブロッキングだし、あまりスマートではないが、とりあえず動くようだ。
次。内蔵RAMからの起動。LPC2880/2888 Product datasheet Rev.3(概要っぽやつ)の6.1.4 On-chip ROMの記述によれば、
----
6.1.4On-chip ROM
The LPC2880/2888 includes an on-chip ROM that contains boot code. Execution begins in on-chip ROM after a Reset.
The boot code in this ROM reads the state of the mode inputs and accordingly does one of the following:
1.Starts execution in internal flash
2.Starts execution in external memory
3.Performs a hardware self-test, or
4.Downloads code from the USB interface into on-chip RAM and transfers control to the downloaded code
----
とある。USBからのDL、というのは、この4.のことで、いったん内蔵RAMにDL後、それを実行(きっとここに内蔵Flashへの転送が書いてあるのが*.ebnなんだろう)、とある。ならば、例のflash書き込みツール(MassDFU)というのは、実は内蔵RAMへの転送ツールなんだろうか?
淡い期待を持ってiRAMでつくったやつをそのままMassDFUで書き込んでみるが、もちろん動作せず。がっくし。ここは、しばらくあきらめるか。
次。外付けDRAM。案の定、こいつも含めて、もろもろ初期化がlow_level_init()に書いてあり、それがcstartup.sから、mainの前に実行されている。
たしかに、unsigned char *p = (unsigned char *)0x30000000;みたいにポインタを宣言しておくと、p[0]や*pなどでアクセスできようだ。めでたい。
2007年10月29日
LPC2888(続)
今日も、あまり時間は取れないながら、合間をみて、LPC2888をつつく。
デフォルトはCPUコアの動作周波数が12MHzのようなので、上限の60MHzまであげてみる。board.hというヘッダファイルに、SYSCLKとして書いておけば、スタートアップルーチン(cstart.s)で、これを使ってPLLを初期化をしているようだ。どうも、標準でついているサンプルが非常によくできているやつっぽく、外付けDRAMの初期化も、標準でちゃんとやっているっぽい。明日、確認してみよう。内蔵RAM領域での実行がまだできていないが、まあ追々。
しかしコアを60MHzにしても、ただI/Oポートの1ビットの値を変えるするだけで、1us近くかかる。なんでこんなにかかるんだろう。LPC2888のデータシートを読む限りは、特にI/Oポート操作にウエイトがかかる様子はないんだけど、なんでだろう。へんなコードを吐いてないか、アセンブル結果を見てみるか。
ちなみにihex→binaryの変換は、xeditでなくても、Cygwinのどれかを入れたときに入ってしまっていたobjcopyで、objcopy hoge.hex hoge.bin -I ihex -O binary と、入出力のファイル形式を明示すると、ちゃんと変換できるっぽい。xeditでつくったBinaryファイルと、最初の1バイトなどがちがうっぽいんだけど、なぜかちゃんと動くっぽい。とりあえず、当面はこれを使うか。
カミナリ
見るにみかねて、カミナリを落とす。
見込みがあれば、こそ。打てば響け。
響かなければ、去れ。
2007年10月27日
EWB for ARM
前日の余韻。調子に乗って、製品版のARM用EWBの価格を調べてみる。
フル機能版のEWARMと、デバッガなどを除いたEWARM-LEがあるようだ。
例えばこんなところでは、40万円ほど。
うーーーーーむ。
2007年10月26日
OlimexのLPC-H2888のブートまでの長いストーリー
OlimexのLPC-H2888に触手を伸ばしてみる。調子に乗って、ARM標準のJTAGアダプタにも触手を伸ばしてみる。
が、買ってみたら、OpenOCDからは使えないことが判明。がちょーん。事前の調査不足。
でも他のNXPのARMであるLPC21**とかだと、UART経由で書き込みができることを思い出す。
が、LPC2888のアプリケーションノートの、Getting Started(AN10548_1.pdf)によると、LPC2888はUART書き込みができない、とのこと。がちょーん。でもUSB書き込みができるらしい。
で、LPC2888用書き込みutilityがあることを知る。NXPからget(flash.utility.mass.dfu.lpc2888.zip)。
こいつの書き込みのファイル形式は、*.ebnという形式だが、
↑に付属のHostcryptv2.exeによってバイナリファイル→*.ebnに変換ができるようだ。
そこで、コンパイラ(IAR EWB)の出力ファイル形式を、*.elfから*.binに変更する。(EWBのProject -> OPtions -> OutputConversion / Output format: intel-standard (*.hex)をチェック
*.hexまでこれば、xeditなどで*.binに変換できる。
早速、EWB付属のsampleのLPC-H2888用の、LEDが点滅するサンプルをmakeする。Getting Started.hexができる。こいつを*.binに変換後、*.ednに変換。
早速、LPC-H2888をUSB接続し、↑の書き込みUtility(MassDFUApplication.exe)を起動するが、Bus Topology上に現れず。そういえば、USB接続したときにドライバも要求されない。
そういえば、と思って、LPC-2888のデータシートのChapter3: Boot Processを読み返すと、デフォルトは内蔵Flashからの起動、で、USBからの書き込み時には、P2.3/Mode2ピンを1にして電源を入れないといけないことを発見。
Olimex LPC-H2888で、このピンはどこだ?と探すと、回路図によれば、R16をショートさせればよいようだ。どこだ?と探すと、基板の裏側の、部品がついていないR16のところをショートさせればよい、ことになる。残念ながら、ショーtピンのようなものは立っていないので、ジャンパ線を半田付けし、クリップでつまむようにする。ちゃんとやるときは、ショートピンかなにかを立てたほうがよさそうだ。
このR16をショートさせて、USB接続すると、めでたくドライバを要求される。なぜかドキュメントに出ているデバイス名と異なる名前が出てくるが、↑のUtility内にあるドライバを指定すると、予定通り"USB Device with DFU Capabilities"となる。めでたい。
この状態で、書き込みUtilityを起動して、Bus Topologyを設定すると、めでたくデバイスが見つかるので、↑の*.ednを指定し、Programモードに移って、自動書き込みを指定すると、めでたく書き込まれる。デバイスをはずせ、といわれるので、いったんはずし、R16のショートをはずして内蔵Flash起動モードにして、再度USB接続(給電)するが、LEDが点滅しない。なぜだ。
もしや?と思い、EWBに戻ると、Projectの設定が、iRAMになっている。きっと内蔵RAMのことだろう。プログラムが内蔵RAMに入っていては、電源をいったん落としたら消えてしまうから、動くはずがない。
そこで、Projectの設定をiFlashに変更し、再度make→*.hex→*.bin→*.ednと変換し、再度書き込み。書き込み後、R16のショートをはずしてUSB接続をやりなおすと、LEDが点滅。めでたい。
もしかして、と思って、内蔵RAM用の*.ednを書き込み後、電源を切らずに内蔵Flash起動モードにしてLPC-H2888のリセットを押しても、残念ながら動作しないようだ。この部分は、今後の課題としよう。
ふう。つかれた。
薄型CRT(続)
なんかすごい方法を思いついたような気がする。
ちょっとシミュレーション開始。
2007年10月23日
おなかすいた
今日は健康診断なので朝食ぬき。
ただし健康診断が10:30から。
おなかすいたよー
2007年10月20日
信用というもの
比較的信用していた人がいた。
わからないことがあったので、聞いた。
ちょっと時間がなかったので、手短に、と思って、聞いた。
教えてもらったけど、よくわからなかったので、もう少し詳しく、聞いた。
もう少し詳しく教えてもらったけど、やっぱりよくわからなかったので、もう少し詳しく聞こうと思って、聞いた。
そうしたら、人のよく話を聞け、といわれた。
時間がなかったので、焦って聞いたかもしれない。
使っている用語の齟齬が少々あったのも事実。
そしてわからないので、じれったかったのも事実。
謙虚な姿勢で聞いていなかったのかなあ、と反省はもちろんしている。
でも、そんなことを言われると、ちょっと悲しい。
そして、その人に対する信用は、かなり薄くなってしまった。
悲しくて、久しぶりに、昨日はほとんど眠れなかった。
2007年10月18日
薄型CRT
なんとなくふと思い立って、薄型のCRTに関する技術動向について、ほんの少しだけ調べてみる。
こんなのとかこんなのとか、数年前まではあるみたいだ。(両方ともSamsungだな・・・)
その後は、どうも盛り上がっていない雰囲気。
どうにかならないもんなんだろうか。
ちょっと思考実験をしてみることにする。
2007年10月16日
他校訪問
とある縁で、富山商船高専を訪問。
非常に面白いお話を聞く。
けっこうイケるんではないだろうか。
2007年10月11日
忘れ物
東京への日帰り出張の少ない空き時間に、秋葉原の秋月へダッシュして、買い物をする。もろもろ1万円程度。
が、その後、訪問先へ移動するときに、どこかでなくしてしまったようだ。
バスに乗るのに並んだときにカバンといっしょに買ったものを地面において、乗るときにカバンだけ持ったっぽい。
あわてて戻ってみたが、もちろん、ない。
中身が中身なので、相当マニアックな人じゃないとほしくないと思うんだけど、場所が場所(秋葉原の近く)なので、誰かが持っていってしまったんだろうなあ。
さようなら、スパイダー。
さようなら、モノクロカメラ2台。
さようなら、単3のeneloop。
2007年10月09日
1歳児
息子(1.2歳)が、最近いろいろなことをする。
まだちゃんとは歩かないのは、いいとして、
洗濯かごにちゃんと入らなかった自分のズボンをちゃんと入れなおしたり、
本を見つけると、1ページずつちゃんとめくっていったり、
本来はまっているものが外れているのを見つけると、はめなおしたり。
実はなかなか律儀な性格なんだろうか?
2007年10月08日
今年のプロ野球
今年のプロ野球のルールは、クライマックスシリーズの1位=優勝、ではなく、
優勝は優勝で、クライマックスシリーズの1位は日本シリーズへの出場権がもらえる、ということらしい。
へんなの。
2007年10月05日
CEATEC終了(自分的に)
あと1日あるが、1日早く帰るため、自分的には今年のCEATECが終わった。
予定していたデモの準備が不本意だったが、代替のデモのほうが、実はよかったような気もする。
おかげさまで、かなり多くの方に話を聞いていただけた。
反応は、まあだいたいいつもと同じ、特に目新しい反応はなかった。
さて、例の顕在化した問題を、ちゃんと取り組むか。
ヒビマイシン。
そしてあと一日、現地でがんばっているみなさん、よろしくお願いします。
2007年10月01日
デモ準備
前々から、だましだましやってきた問題点が、顕在化してしまった。
どうもうまくいかない。
なんとか今回はだましだましで乗り切るが、落ち着いたら、根本的になんとかしないといけない。
本質的な問題ではないんだけど、実用上は避けられない問題。
さくら(犬・パピヨン・♀6歳)
さくら(犬・パピヨン・♀6歳)が、何かヘンなものを食べたのか、突然、嘔吐して死にそうな目をしていたので、あわてて病院へ連れて行く。幸い近所に日曜にやっている動物病院があった。
が、嘔吐したときにぜんぶ出たのか、病院に着いたころには、すっかり元気になっていた。
いずれにしても、最近、つまみ食いが多いから、いけませんな、これは。
稲見先生@電通大
Engadget/Jに載っている。
すごいなあ。
自分も、いつかEngadgetに載る日が来たいものだ。