c - 减慢模拟器速度

标签 c emulation simulation

我正在尝试实现模拟器主循环。模拟器全速运行。大约 60 MHz。但我想让它以 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) 将循环计数器设置为零。

最佳答案

我认为这是因为 emu_step 在 for 循环的每次迭代中都会执行,如果将其移到 if 内,那么它只会在 已用时间 >= 1000000。在这种特殊情况下,您可以独立于循环执行一次,这样您就不必等待一个受限的周期

它可能看起来像

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

关于c - 减慢模拟器速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40548409/

相关文章:

emulation - 无法在模拟器中创建集合

java - Anylogic 模拟存储在容器中的 Material

r - 生成具有给定相关性的随机变量 :

java - 如何在Hadoop上模拟运行一些服务器?

c - 从分数中扯下一个数字

c - 大型二维数组的段错误

android - 无法在 Android 模拟器 - Windows 上运行 React-Native 应用程序

Android 模拟器无法加载完整网站

C - 对于非指针函数的参数中的 const 用户有何优势?

c - 我如何在 C 中的某个时间后停止 while 循环