単純なコードを最適化するためのいくつかの提案が必要ですが、高速である必要があり、高速とは250 ns未満を意味します。
私の最初のコードは遅く、約 1000 ns でしたが、いくつかの作業の後は約 550 ns になりましたが、より速く実行できると思いますが、方法がわかりません :<
80 MHz システム クロックの PIC32 を使用して
います私のコード:
void main()
{
unsigned long int arr_1[4095];
unsigned long int arr_2[4095];
//here I assign arr_1 and arr_2 values
//...
//...
TRISC = 0;
TRISD = 0;
while(1){
LATC = arr_1[PORTE];
LATD = arr_2[PORTE];
}
}
仕事としては非常に単純であることがわかるように、唯一の問題は速度です。
命令の数を確認するためだけにアセンブリのリストを見ましたが、それを最適化するためのアセンブリ言語がわかりません。
;main.c, 14 :: LATC = arr_1[PORTE];
0x9D000064 0x27A30000 ADDIU R3, SP, 0
0x9D000068 0x3C1EBF88 LUI R30, 49032
0x9D00006C 0x8FC26110 LW R2, 24848(R30)
0x9D000070 0x00021080 SLL R2, R2, 2
0x9D000074 0x00621021 ADDU R2, R3, R2
0x9D000078 0x8C420000 LW R2, 0(R2)
0x9D00007C 0x3C1EBF88 LUI R30, 49032
0x9D000080 0xAFC260A0 SW R2, 24736(R30)
;main.c, 15 :: LATD = arr_2[PORTE];
0x9D000084 0x27A33FFC ADDIU R3, SP, 16380
0x9D000088 0x3C1EBF88 LUI R30, 49032
0x9D00008C 0x8FC26110 LW R2, 24848(R30)
0x9D000090 0x00021080 SLL R2, R2, 2
0x9D000094 0x00621021 ADDU R2, R3, R2
0x9D000098 0x8C420000 LW R2, 0(R2)
0x9D00009C 0x3C1EBF88 LUI R30, 49032
;main.c, 16 :: }
0x9D0000A0 0x0B400019 J L_main0
0x9D0000A4 0xAFC260E0 SW R2, 24800(R30)
コードを最適化するための提案はありますか?
編集:
*PORTE、LATC、および LATD は I/O マップされたレジスターです *PORTE が変更されたときに LATC および LATD レジスターをできるだけ速く変更するコードの目標 (したがって、PORTE は入力であり、LATC および LATD は出力です)、出力PORTEの値に依存