2008/04/17(木)[雑]LCDライブラリ自作(失敗
拙作ルーチンの移植~失敗(ぉ
あきぼう氏のavrgccでアセンブラを使うを参照し、アセンブラでライブラリを作成します。
;---------------------------------------- ;LCD_WriteCMD: LCDへコマンド1Byte送信 ;引数: register::LCD_DATA ;返値: なし ;---------- LCD_WriteCMD: rcall LCD_WaitBusy ; Wait for LCD BUSY SWAP LCD_DATA RCALL LCD_WriteCMDn ; $+1? LCD_WriteCMDn: mov tmp, LCD_DATA andi tmp, 0x0F ori tmp, (ID_DATA) ; P.U. out PORTD, tmp ; RS,R/W set sbi PORTD, LCD_E ; 2cycle, E Hi rjmp PC+1 SWAP LCD_DATA cbi PORTD, LCD_E ; 2cycle, E Lo ret
これ*1をエイヤこらどっこいしょとgcc向けにポーティングしようとして挫折。寝る前にさくっと終わるならいいかな?と思っていたけれども甘かった。いきなり汎用化記述を始めたのが敗因だなw。使用しているポートも変わるので、いっそのこと汎用化しようなんて考えたのが悪かった。
まぁ、寝不足に疲れのたまった脳では効率悪すぎたか(言い訳
氏のライブラリを伸ばして、コマンド待ちルーチン・データ入力ルーチンを追加することにしますかね。ウェイト部分をコマンドリードしてBUSY消えるのを待てばいいだけだしね。gccが吐き出したコードを見て、すげぇむだがあるようならアセンブラ化してしまいましょう。ただし、ユーザ定義のポート・ビットに耐えないといけないので、Cのままのほうが互換性は高そうですけれど・・・。無理にアセンブラ化しなくていいかなぁ・・。どうせLCDモジュールの処理待ちで待ち時間がかなりかかるはずだし。
ということはこの2時間ばかり捨てたということか('AP