2011年8月23日火曜日

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その4】

あわせてユーザプログラムも修正が必要です。
ま、こちらはHIDBootload用にメモリ空間ずらしが考慮されていますので
それを追っていけばどこを修正すればよいかがわかります。

※bootloaderの増量分は0x100としています。個別の環境で必要な量は変わる可能性があるのでご注意を。

赤字部分が変更箇所です。
  1. リンカースクリプト
    bootloader部のメモリ割り当て量を増やし、その分、その他のメモリ配置を後ろにずらす。
  2. 元プログラム
    CODEPAGE  NAME=bootloader START=0x0      END=0xFFF   PROTECTED
    CODEPAGE  NAME=vectors    START=0x1000   END=0x1029  PROTECTED
    CODEPAGE  NAME=page       START=0x102A   END=0x7FFF
    
    変更後  
    CODEPAGE  NAME=bootloader START=0x0      END=0x10FF  PROTECTED
    CODEPAGE  NAME=vectors    START=0x1100   END=0x1129  PROTECTED
    CODEPAGE  NAME=page       START=0x112A   END=0x7FFF
    
  3. ユーザプログラム
  4. 元プログラム
    #define REMAPPED_RESET_VECTOR_ADDRESS   0x1000
    #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
    #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
    
    変更後
    #define REMAPPED_RESET_VECTOR_ADDRESS	        0x1100
    #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x1108
    #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x1118
    

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その3】

具体的な変更箇所です。
先回も述べたとおり、bootloaderを配置するメモリの大きさを大きくし、その分それ以降のメモリ配置をずらします。
私の場合は大きくしたメモリ量は0x100分です。
ユーザプログラムの変更も必要です。それはまた次回。

  1. リンカースクリプト BootModified.18f2550_g.lkr
    bootloaderのお尻のアドレスをずらし、bootloaderの格納領域を大きくする。

    元プログラム
    CODEPAGE NAME=BootPage START=0x20  END=0xFFF

    変更後
    CODEPAGE NAME=BootPage START=0x20  END=0x10FF

  2. メインプログラム main.c

    元プログラム
    ベクターの再配置情報
     _asm goto 0x1008 _endasm
     _asm goto 0x1018 _endasm
    ユーザプログラムへのジャンプ部
     goto 0x1000 //If the user is not trying to enter the bootloader, .....
    

    変更後
    ベクターの再配置情報
     _asm goto 0x1108 _endasm
     _asm goto 0x1118 _endasm
    ユーザプログラムへのジャンプ部
     goto 0x1100 //If the user is not trying to enter the bootloader, .....
    

  3. ブートローダ本体 BootPIC18NonJ.c

    元プログラム
    //ユーザプログラムの先頭アドレス
    #define ProgramMemStart  0x001000 //Beginning of application program memory ...
    
    ユーザプログラムを書きこむ際に消去するメモリのブロックサイズ 256バイト単位で設定
    #define StartPageToErase 64 //The 4096 byte section from 0x000-0xFFF ...
    

    変更後
    //ユーザプログラムの先頭アドレス
    #define ProgramMemStart  0x001100 //Beginning of application program memory ...
    
    ユーザプログラムを書きこむ際に消去するメモリのブロックサイズ 0x100ずらすので、値は4増やす。
    #define StartPageToErase 68 //The 4096 byte section from 0x000-0xFFF ...
    


Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その2】

ま、結論から行きます。
最適化が切れてbootloaderのサイズが大きくなってしまったのだから、その分後ろにずらして
やればよい。
デフォルトのbootloaderの大きさは4Kバイト(0x000~0xFFF)と設定されています。
こちらのページに種々のbootloaderの情報が書かれています。

※最初は上記のサイトにあるbootloaderに浮気をしよう、と思いました。
ま、いつか浮気はするわけですけどたぶん。だってモニタもついてるんだもん。

で、bootloaderのコードを見始めました。

どうやら下記の3つが関係しているようです。
  1. リンカースクリプト(lkr)ファイル
    ベクターマップ、プログラムコード、EEPROMなどのメモリ配置の定義。
    →メモリマップを変更しようとしているのだから当然、ですよね。
  2. ブート部プログラム
    いわゆるmain()。スイッチの状態で2のローダを実行するか、ユーザプログラムを実行するかを決める。
    →ユーザプログラムのアドレスが変わってしまうので変更必要。
  3. ユーザプログラムのローダ
    USB経由でPCホストのプログラムからのコマンドを受け付け、
    フラッシュの消去・プログラム・ベリファイを行う。
    →フラッシュ領域のどこにユーザプログラムをロードするかの変更が必要。
まぁ、ずらしてやる、という比較的単純な作業なので作業漏れが無いように見ていく、
というのが重要ポイント。

どこをどう変えるのかはまた次回で。


2011年8月17日水曜日

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その1】

入手性の観点からEZUSBからPIC18に切り替えていくことにしたので
すこし不安を感じながらいじり始めました。

とりあえず、USBのマウスサンプルを書き換えてジョイスティックにしてボタン数を
増やしたりして、手応えを感じたのでEZUSBの開発の容易さは忘れられず
純正HIDBootloaderを試すことにしました。

BootloadのHEXファイルはサンプルとしてついていたのですが今自分が使おうとしている
2550ではなく4550用と思しきファイル名になっていたのでせっかくなのでコンパイルして使おう、
と作業を始めました。

しかし。うまくいきません。コンパイルが通らないのです。

Error - section '_cinit_scn' can not fit the section. Section '_cinit_scn' length=0x0000009e

のようなエラーが出ます。
google先生!に伺ったところ、C18の評価期間が切れて最適化が行われなくなったため
所定のサイズにコードが収まらねぇ。と言っているようです。
解決策として最適化オプションを有効にせよ、というページがあるのですが上記のような
状態なので解決策になってないのです。
C18をインストールしなおすと評価期間がリセットされるという情報もあるのですが
なんだか後ろめたい気もしなくもないですし、いつか対策されればそれでチョンなわけです。

で解決策を考えました。

長くなるので次回に続く。

2011年8月11日木曜日

MacBookAir液晶への写り込み

MacBookAirを買って約2週間がたちました。
いいところ、として液晶への写り込みが(自分としては)許容範囲にあります。

個人的にはマットなコーティングが好みなのですがこれは
明るい場所を背にしたり、また自分の顔が写り込んだりしてどうも気になるためです。

MBPはひどくてすぐにフィルムを買いに行きました。

でMBAですが冒頭にも述べたように許容範囲です。今のところ。
ARコートがうまくできているのでしょうか。
またマットなコーティングと違い表示もクリアです。
マット仕上げの液晶の場合、写り込みも少ないですが表示内容もマット仕上げの部分を
投下して目に届くため(すこし)マットな仕上げになって表示されることになります。

今のところ、MBAは表示のクリアさと反射の少なさを両立していると言えます。

2011年8月9日火曜日

MacBookAirのキーボードはUSかJISか。

今回MBAを買うにあたり、CTOした時点で”US”と決めてました。
それは”カッコ”のみです。はい。

覚えれば速い50音キーボードですがこのうん十年ローマ字でやってきたので
今更必要ないのです。

で、すこしキーが減る分、どれかキーが大きくなって打ちやすいだろう、と
あまり意味もなくUSにしてしまいました。

しかーし。
”失敗”です。JISでいいです。いや、JISがいいです。

やっちまったよ。ほんとに。
うちにある、たぶんドナドナされてしまうであろうMBPはJISです。
すぐほしいから近くの量販店でお持ち帰りしたものです。

JIS、楽です(した、今に思えば)。
言語モード選択を1キーでできる。
英数、日本語モードを一発で選択できる。

しかも。CTRLキーが”ちゃんとした”位置に最初からある
USでもね、CTRLとCAPSLOCKは標準機能で交換可能になってます(すばらしい)。
知りたい人は”修飾キー”で検索を。

というわけでね。
普通の人はJISでいいです。

特に普通の人はほかのPC触るとき特にキーの違いに悩むと思うのでJISでいいです。

自分はUSにも触る機会がそこそこあったせいか、打ってしばらくすると頭が修正されて
慣れていきます。不思議と。でもね、カッコ"("はたいがい、1キー横にずれます。
よく考えるとプログラム打つとき結構ミスる。このごろの開発環境は補完をして括弧閉じしてくれるのでちょっと助かってる。

いや、だめじゃん。自分。

そこのあなた!デザインだけで”かななし格好いいもんね”と思ってる人。
JISにしときなさい。
海外に行っても(漢字じゃないけど)珍しいキーボードだからウケるかもよ、今時なら。

2011年8月7日日曜日

MacBookAirを買いました。

MacBookAirを買いました。
初代Airが出てから、その大きさ、軽さにずっと魅力を感じてはいたのですがその性能が私の要求には適わずに買うことをずっとためらってきました。

その要求は下記の3点です。
1.バッテリー性能
 8時間程度は連続して使用したい。すごく適当な感覚、ですけど一日の仕事ができるぐらい。
2.性能
 大きくデスクトップから劣るのは困る。レンダリング、ゲームなどはしないぐらい。
 けど、ソフト開発などをするにあたりコンパイル、開発環境の操作性に大きく影響を感じないぐらい。
3.重さ
 まぁ、やっぱり軽いほうがいいけど、ここは1.との兼ね合い。
4.操作性
 フルキーボード、そこそこの表示の大きさ。
 (私にとって)小さすぎるキーボード、解像度はそこそこあるけど小さなディスプレイ、というのは慣れることができませんした。

実は、今のところMBP13inch Mid2010を持っています。
これは、その前に持っていた、MBに比べバッテリー持続性能が約2.5倍になったときに買ったもので
3.を覗いて私の望むものをすべて満たしています。

最初にMBPを手にし、充電・検索インデックスの終了を待ってからバッテリー駆動したときに表示された”あと10時間”という表示に、ニヤニヤせずにはいられませんでした。

実際、持ちだしても10時間、はさすがに厳しいけど実働7時間はなんのストレスもなく動いてくれるMBPには心のそこから満足しています。

しかーし。やっぱり軽く薄いというのは、一度その存在を知ってしまうと試したいという衝動を抑えるのに必死でした。
これを抑えることができたのはMBPのその性能と、それを大きく上回る魅力を持つPCの出現がなかったからではないかと思います。

小さいPC、という意味ではLooxなどもその昔買ってみたことはあるのですが古い人間だからか、あまりのキーボードの小ささにどうしても馴染むことはできず結局のところ手放してしまいました。
別にMacの操作性がいいから、といったことではないです。

で、今回のMBAです。
正直、1.のバッテリー性能は少し、私の要求には答えていないかもしれません。
現在、出先でこの文章を書いていますがフル充電での残駆動時間は表示上6時間30分程度、MBPの7時間、場合によっては表示上9時間の残量と比べると、8分目といったところです。

しかし、やっぱりその重さ・薄さは捨てがたい、MBPからは得難いものです。
今までは多少、”奮い立って”PCを持ち出す必要がありましたがとりあえずかばんに放り込む、というスタイルがぴったりなほどの大きさです。

しかもフルキーボード、ディスプレイの大きさは何も捨てていません。
ただ、今までのMBPがJISキーボードだったのに対しCTOでUSにしてしまったキーボードの差異に多少の戸惑いを感じています。
配置が違うから、というよりすこし、小さい?ストロークが短いせいかもしれません。

だけどやっぱり格好いい。うん、買ってよかった。えへ。恋愛と同じく理由じゃない、気持ちの問題でしょう。