msp430g2553
を使用しており、クロックを1Mhzに設定しています:
BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
500万サイクルの時間を計りましたが、予想外に約6秒かかりました(5を期待していました)。使用したループは次のとおりです。
int i; for(i = 0 ; i<5000; i ++)__ delay_cycles(1000);
割り込みの使用について読みました(おそらくTimer_Aなどに基づいています)が、今は避けたいと思います。
つまり、私の質問は、__ delay_cyclesに基づいて定数引数 sleep
を実装するにはどうすればよいですか?
後の編集
アセンブリ:
void delay1000(){__ delay_cycles(1000);}
is:
delay1000: 0c3b4:04 12 PUSH R4 0c3b6:04 41 MOV SP、R4 0c3b8:24 53 INCD R4 0c3ba:3f 40 4c 01 MOV#0x014c、R15 // 332 10進数(1000/3 -> DEC、TST、JNZ)0c3be:1f 83 DEC R15 0c3c0:0f 93 TST R15 0c3c2:fd 23 JNZ delay1000 + 0xa 0c3c4:03 43 NOP 0c3c6:03 43 NOP 0c3c8:34 41 POP R4 0c3ca:30 41 RET