2016-11-11 174 views
3

我试图实现模拟器的主循环。仿真器全速运行。大约60兆赫。但是我想让它运行在4.77Mhz。它是如何完成的?减慢模拟器速度

for (;;) 
{ 
     emu_step(ctx) ; 
     uint64_t current = get_gtod_clock_time() ; 
     uint64_t elapsed = current - last_time ; 
     if (elapsed >= 1000000) 
     { 
      printf("Cycles: %d\n", get_cycles(ctx)) ; 
      set_cycles_zero(ctx, 0) ; 
      last_time = get_gtod_clock_time() ; 
     } 
} 

emu_step()是执行一条指令的函数。 get_cycles(ctx)是执行的机器周期的总和。 set_cycles_zero(ctx, 0)将周期计数器清零。

回答

0

我认为这是因为emu_step正在执行for循环的每一次迭代,如果您将它移动到if之内,那么只有在elapsed >= 1000000时才会执行它。在这种特殊情况下,你可以独立于循环执行一次,这样你就不必等待一个扼杀cycle

它可能看起来像

emu_step(ctx) ; 

for (;;) 
{ 
     uint64_t current = get_gtod_clock_time() ; 
     uint64_t elapsed = current - last_time ; 
     if (elapsed >= 1000000) 
     { 
      emu_step(ctx); 
      printf("Cycles: %d\n", get_cycles(ctx)) ; 
      set_cycles_zero(ctx, 0) ; 
      last_time = get_gtod_clock_time() ; 
     } 
}