2007-03-31 (土)
実家へ.
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. なので実際のものとは何も関係がありません. それから,写真のように見える画像はCGもしくは念写によるものです.
実家へ.
ホテル>京都駅>金閣寺>立命館大学,竜安寺>北野天満宮>清明神社>京都駅>ネットカフェ
ネットカフェ初体験です.
少し前に,ThinkPadのSDのドライブに割り当てられた名前が,「SD記録装置デバイス」になっているのに気づいたので「SD記録装置」に変更しました.
よく周りを見れば,Kinkaku-ji templeとか,重複した表記はたくさんありますね.
それにしても,「装置」と「デバイス」は両方書かない気がするのですが….
嵯峨嵐山⇒京都駅⇒伏見神社⇒京都駅>清水寺,円山公園,八坂神社,新京極>神泉苑,二条城>京都駅>ホテル
今日から京都旅行の予定だったけど明日に繰り上げ.今日の分のホテルの予約はもともと取ってないので問題ない.
卒業しました.スーツ着るのが面倒くさいので欠席しようかと思ったのですが,Safiiから電話がかかってきたので,急いで家を出る.会場に着いたら,ちょうど始まるところでした.
大学に戻ってから卒業証書やら証明書を受け取る.成績証明書とか見ると,もう卒業研究の単位もちゃんと入ってますね(あたりまえ).
ところで,3月20日卒業とかになってたんですが,ということは今は学生では無いんでしょうか?
卒業祝いに豪勢なものを食べようと思って食堂に行く.かなり奮発して550円.
ちょっと様子を見に行く.
卒業式の日に出すと言っていたので,メールで送る.メール書いているうちに微妙に日付が変わっていましたが.
論文出した直後に電話が…かなりびっくり.
1年間タダでACMの会員になれるよというメールがICPCから来てたのを思い出して登録.色々と利用できるコンテンツはたくさんあるのですが,言語の壁が…….
最近,豆腐が10円/300gで売られてるんですが….木綿豆腐と絹ごし豆腐を両方買っておく.
朝から行ってみる.今日は赤外線通信の実験.
大学のゴミ捨て場を漁ってから帰る.電子パーツを少し拾いました.
卒業式の日に提出するとか言っていたので,最後の仕上げ.謝辞とか書いたり.
午前中は野沢温泉に行って来る.温泉饅頭と温泉卵も食べました.
でした.
受信時にも一度バッファに読み込んでPC側に渡すように.やっぱりメモリとの格闘になりました.
とりあえず,読み書きともに1KB/s近くになりました.これ以上はバルク転送しないといけない気がしますが,それはTiny2313には荷が重い.
色々といじっていたら10バイト以上余裕ができたので,ISPの通信速度をPC側から設定する機能を追加.
通信速度を測ったら,書き込みは400byte/s,読み込みは110byte/s程度でした.読み込みが異常に遅いのは,1バイト読むごとにパケットを1つ交換しているからです.LowSpeedデバイスのインタラプト転送の転送量は800B/sあたりが限界なので,8バイトのパケットを交換していることを考えれば,これが限界です.書き込みはひとつのパケットに6バイトのデータを入れて,ターゲットAVRのページバッファに転送しているのでまだ良いようです.
読み込み時にもISPコマンドをライタ側で生成できれば数倍の早さになるはずですが,そのためにはもう少しプログラム領域を空けないといけません.
卒論の締め切りが今日だったので,締め切り記念で焼肉.
そろそろ,卒論を完成させないと…(ぇ?
やっとページ書き込みをライタ側で処理できるようになった.
最初,変なデータが書き込まれるので,よく調べてみたら色々な目的に使いまわしている配列の一部が重なる場合があることに気づく.変数の領域を広げるために,かなり色々書き直し.またusbdrv.cの中もいじる羽目に.
変数の使いまわしをするなとか綺麗ごとをよく言いますが,2Kバイトのプログラムと,128バイトのRAMでUSBをハンドリングして,他にも色々と機能を実装しようと思ったら,他に道はありません.
ある複数のデータが同時に有意な値を必要とすることが無いことを記述して最適化できる言語が欲しい.できれば自動でやって欲しいけど,そのためにはUSBのプロトコルや,PC側のコントロール用プログラムの仕様が必要になるしなぁ.外部環境を考慮した最適化手法の登場はまだですか?
あとは,読み出しもバッファに貯めて一気に出来るようにしたいけど,残りのプログラムメモリは2バイトしかない.どこを削るか…….EEPROMのページ書き込みを諦めれば数バイト削れるな….他には,関数呼び出しのオーバーヘッドが大きいから,ソースファイルをひとつにまとめてinlineをつけるか.
おでん.
avrspxを今回作ったライタに対応させる.最低限の機能はテストできた.
プログラムの読み出しが1バイトずつしか出来ないので,Verifyが遅い.まとめて転送できるようにしたいけど,2313側のメモリがもう全く空いていない.あと,転送速度の設定も出来るようにしたいのだけど…….どうしてくれようか.せめてあと数十バイトあれば….
C言語上で出来る最適化は殆ど手詰まりなので,あとはアセンブラで書き直せば少し削れそう.
やっぱり,2KバイトのプログラムでUSBを使ったAVRライタは実用じゃないという結論?せっかく,HIDの扱いを思い出したから,ポインティングデバイスでも作ってみようか.MicrosoftのHIDの情報が整理されていて分かりやすい.
gccって,C言語のラベルはコンパイルした時点で「.L5:」みたいな無意味な名前にされてしまうんですね.ちょっと不便.コンパイルオプションで指定できないのかな.
なんか,gccがすごく気に食わないコードを生成するのですが,コンパイルオプションが悪いのかなぁ….
到達不可能なコードは最適化時に消してくれますが,そこから呼ばれている関数が残ってしまうことがあります.関数にstaticが付いていても,安心できません.
AVRには,特定のビットを見て一命令スキップする便利な命令があります.avr-gccはif文の中身が一命令で済み,条件を左右するのが1ビットのみな場合,scrs命令を使ってくれるようです.
a が 0 か 1 の場合は a!=0 として判定するよりも, a&1 で判定しましょう.
255以下の整数はunsigned charとして扱って欲しいところ.具体的には,aがchar型だったとして「a&0x22」とかを計算すると,andi命令は副作用があるので,aを別レジスタにコピーする.そのときに,16ビットに拡張してから0x22とのandiを取ろうとすることがあるようです.
if (a&0x22) { // ... } uint8_t tmp=0x22; if (a&tmp) { // ... }
上のより下の方がコードサイズが小さくなることがある.
リテラルをキャストしても無効っぽいので,「inline static uint8_t byte(uint8_t t) {return t;}」という関数を作ってしまう手もある.C言語の整数のサフィックスになんでchar型に相当するものが無いんでしょうか.
AVRには任意ビットのシフト命令がありません.シフトで変なコードが生成されやすいです.
8ビットシフトは,バイトごとの移動でやってくれますが,算術シフトだと,符号のための分岐命令が出てきたりします.
「||」の左右の式の間の最適化は殆どされないようです.評価順序がどうでも良い場合は,「|」で繋ぎましょう.
これはどうしようも無いかも…….コンパイル後に手で消しましょう.というか,C言語でスタックを使わないプログラムとか書いてはいけません.
明日の準備.明日は9時集合か….
2313でHIDなAVRライタ製作の続き.
とにかくプログラムサイズとの格闘.ページ書き込み時にデータを高速に転送するためのコードがなかなか入らずに苦戦.最後の数バイトを削るのに1時間近く試行錯誤しました.最悪,デバイス名を1文字にすることまで考えましたが,どうにか収める.
あとは,PC側のソフトか.
やっと入学手続きを済ませました.私には超難関でした.
昨日から,AVR USBとTiny2313を使ってUSBaspみたいなAVRライタを作ることを考えていたのですが,実行に移しました.
部品数は少ないので回路はすぐに完成.
ドライバのインストールは意外と面倒なので,HIDに対応する.AVR USBのサイトにあるコードを参考にすれば,簡単そうです.ソフトウェアでも変なことをしたくないので,Read/WriteFile()で通信できるようにいろいろといじる.HIDは散々USB-IOで遊んだので問題なし……と思ったら,どうしても受信ができなくてAVR USB自体に手を入れてしまいました.もう少しスマートな方法があるとは思うけど仕方ない…….
120円のマイコンでUSB機器が作れるのは魅力的です.
入学金を振り込みにいく.
なんだか,最近は本人確認が出来ないと10万円以上の振込みが出来ないらしく,何か確認できるものを出せと言われました.
とりあえず,本人確認書類の一覧に保険証があったので,保険証を出したら,「顔写真が付いていないとだめ」とか言われました.私の知っている保険証は,写真は載ってないものなのですが,普通載っているんですか?
運転免許証を出せと言われましたが,そもそも免許なんか持ってないので,代わりに学生証でも良いか確認して,渡す.
しばらく待ってたら,今度は口座の住所と違うと言われて,実家の住所が載っているものを要求される.そんなわけで,やっぱり保険証も合わせて出す.
で,さらに,実家の住所が古いもので登録されてたので,面倒なことに.とりあえず,後で変更届けを出すと言って,その場は見逃して(?)もらう.
なんで,こんなに面倒くさいんでしょうか.入学金の振込みで入学を諦める人が出てきてしまうと思います.
次の難関は,書類を全て書くことです.面倒くさい…….
いろいろ.
とりあえず,卒論は卒業式までに完成させることに.
とりあえず,手動マシンを仕上げる.本番のときより調子がよさそうです.
AVRライタが私のThinkPadで使えないので,試しに信号の電圧をツェナーダイオードで落としてみると普通に使えるようになった.
夕食は学食で食べたあとにロボ研のみんなで洋麺亭.
入学金を払いに銀行に行ったらちょうど窓口が閉まるところだった.明日振り込もう.
10日のデモの話をするために,久しぶりに行ってみる.とりあえず,前日は16時から準備.当日は9時に現地集合.
ロボットランサーはがんばっているみたいだけど,かなり怪しい雰囲気.まだラインとレースさえ出来てない人が多いみたい.
明日までに下書きを書かないといけない.というわけで,MeshiとSafiiの研究室で書く.一気に15ページ以上書きました.図が多いですが.
昼食はオムレツ.クッキーを焼く.夕食はうどん.
散歩がてらに買い物に.
家賃を払いに行く.今年から不動産屋を通すことになるらしい.振込先とか知らないけど,そのうち何か来るのかな?
掃除,洗濯.
そろそろ卒論を仕上げないと.
昼過ぎにロボ研を覗きに行ったけど,誰もいなかった.大丈夫なのかな…….
寝る.微妙に体調が悪い.