lpc1788 ボードの mips を計算したことがありますか? 最近、ROMで実行されている次のコードを介して結果を計算しました:
volatile uint32_t tick;
void SysTick_Handler()
{
tick++;
}
unsigned long loops_per_ms;
extern void __delay(int n);
int calculate_mips()
{
int prec = 8;
unsigned long ji;
unsigned long loop;
loops_per_ms = 1 << 12;
while (loops_per_ms) {
ji = tick;
while (ji == tick) ;
ji = tick;
__delay(loops_per_ms);
if (ji != tick)
break;
loops_per_ms <<= 1;
}
loops_per_ms >>= 1;
loop = loops_per_ms >> 1;
while (prec--) {
loops_per_ms |= loop;
ji = tick;
while (ji == tick) ;
ji = tick;
__delay(loops_per_ms);
if (ji != tick)
loops_per_ms &= ~loop;
loop >>= 1;
}
return loops_per_ms / 500;
}
遅延:
PUBLIC __delay
SECTION .text:CODE:REORDER(2)
THUMB
__delay
subs r0, r0, #1
bhi __delay
mov pc, lr
END
IAR IDE では、loops_per_ms が 39936 で mips が 79M になりましたが、Keil では loops_per_ms が 29952 で、これは mips が 59M であることを意味します。
MCU の速度は 120MHz に設定されています。データシートによると、MIPS は 1.25x120=150M である必要があります。ROM で実行されているコードが mips を遅くしていると思います。
体にコメントやその他の結果がありますか?