学习目标

  • 模拟定时器
  • 实现时间计数
  • 触发定时中断

14.1 思考:如何模拟时间?

真实硬件有晶振,模拟器怎么办?

答案:用指令计数

uint64_t timer = 0;

void cpu_exec_once() {
    // 执行指令
    timer++;  // 每条指令 +1
}

14.2 实现

uint64_t mtime = 0;
uint64_t mtimecmp = 0;

void timer_tick() {
    mtime++;
    if (mtime >= mtimecmp) {
        // 触发中断
    }
}

下一步

第 15 章:CLINT 实现

更新时间: