パスワードを忘れた? アカウント作成
745437 journal

rurimikanの日記: 最適化[今日もPICの話]

日記 by rurimikan
RAMやROMの容量を節約して使う

[#use fast_io(b) を使う]

exp. PIN_B0 ポートB 0番端子の状態を変更する

#use fast_io(b)
output_low(PIN_B0);
0050: BCF 06,0

output_high(PIN_B0);
0051: BSF 06,0

入出力指定のコードが入らないので、短くて済む

[#use fast_io(b) を使わない]<-----何も指定しない場合

入出力指定のコードは、ピン操作の度に設定されるので多くなる

output_low(PIN_B0);
0050: BSF 03,5
0051: BCF 06,0
0052: BCF 03,5
0053: BCF 06,0

output_high(PIN_B0);

0054: BSF 03,5
0055: BCF 06,0
0056: BCF 03,5
0057: BSF 06,0

と見た目にもわかるくらい単純に最適化された。
ほかにも内部ではいろいろあるみたい

んで、コンパイラが吐き出すアブソリュートリスト(アセンブラでどんな風に展開されているか示すファイル)
が見にくいので、以下の物を計画中

機能
        goto , call があればラベルを作成する、
        呼び出しているアドレスもコメントで出力できるとよい

        直値になっているものに機能名表示をつける

        ニーモニック表をつける

        RAM領域の場合は特別に明示する

        ルーチン毎に区切る

        ビット操作命令の数値は、2進数表示をコメントに加える

方法

        1.文脈解析をperlでやって、kylixはオプションのフロントエンド
        2.全てkylix で行う

と言う風なもの

perlでフィルタ試作して、ほんちゃんはkylixを使うのが練習にええかな

処理前

....................
.................... set_tris_a(Amode);
00D7: MOVLW 00
00D8: TRIS 5
.................... set_tris_b(Bmode);
00D9: TRIS 6

00DA: GOTO 0D7
00DB: MOVWF 0C

フィルタ後

.................... set_tris_a(Amode);
00D7_001: ;00DA

00D7: MOVLW 00
00D8: TRIS PORT_A ; PORT_A 入出力設定

.................... set_tris_b(Bmode);
00D9: TRIS PORT_B ; PORT_B 入出力設定

00DA: GOTO 00D7_001
00DB: MOVWF RAM[0C] ; RAM領域
typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...