2016-11-11 162 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() ; 
     } 
}