📄 temp_caldelay.c
字号:
/************************* 计算for (i=0; i<n; i++);的时间 ***************************/
//"for (i=0; i<n; i++);"在反汇编文件中翻译如下:
+00000039: E080 LDI R24,0x00 Load immediate+0000003A: E090 LDI R25,0x00 Load immediate22: for (i=0; i<n; i++);+0000003B: 1780 CP R24,R16 Compare+0000003C: 0791 CPC R25,R17 Compare with carry+0000003D: F410 BRCC PC+0x03 Branch if carry cleared22: for (i=0; i<n; i++);+0000003E: 9601 ADIW R24,0x01 Add immediate to word+0000003F: CFFB RJMP PC-0x0004 Relative jump
//每个指令的时钟周期
LDI R24,0x00 //1LDI R25,0x00 //1CP R24,R16 //1CPC R25,R17 //1BRCC PC+0x03 //1ADIW R24,0x01 //2RJMP PC-0x0004 //2
//计算for (i=0; i<n; i++);的时间
time=(2+7*n+4)*时钟周期
//中断中需要的定时间隔2209.375us 5chips 4chips
(GP-8)+UpPTS+675us*3-12chip=75+125+675*3-20*0.78125=2209.375
2209.375 = (2+7*2523+4)*0.125us + 2*0.125 + 4*0.125 + 2*0.125 //2209.375
0.78125*5 = 3.90625 = (2+7*3+4)*0.125us + 2*0.125 + 0*0.125 + 2*0.125 //5 chips
0.78125*4 = 3.125 = (2+7*2+4)*0.125us + 2*0.125 + 1*0.125 + 2*0.125 //4 chips
675us + 96*0.78125 + 3*0.78125 = 752.34375us = 20*0.125 + 2*0.125 + (2+7*855+4)*0.125us + 4*0.125 + 2*0.125
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -