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領域
[#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領域