完成了计时器的实时更新。

This commit is contained in:
423A35C7 2024-03-26 15:26:25 +08:00
parent 7795b72eb6
commit 08a0e08f4d

View File

@ -166,11 +166,15 @@ trap_dispatch(struct trapframe *tf) {
*/ */
switch (state) { switch (state) {
case STARTED: case STARTED:
milliseconds += mode; if (ticks % TICK_NUM == 0) {
// 当时间倒计时到0时转成停止状态 milliseconds += mode * TICK_NUM;
// 而正计时加了mode之后至少为1所以不会转换状态 // 当时间倒计时到0时转成停止状态
// 使用小于等于0而不是等于0是为了防止万一出现异常导致小于0的情况 // 而正计时加了mode之后至少为1所以不会转换状态
state = READY_TO_OUTPUT * (milliseconds <= 0); // 为了减少分支才写成这样 // 使用小于等于0而不是等于0是为了防止万一出现异常导致小于0的情况
state = READY_TO_OUTPUT * (milliseconds <= 0); // 为了减少分支才写成这样
// print_ticks();
cprintf("\r%d.%03d\t", milliseconds / 1000, milliseconds % 1000);
}
break; break;
case READY_TO_OUTPUT: case READY_TO_OUTPUT:
state = STOPPED; state = STOPPED;
@ -182,9 +186,6 @@ trap_dispatch(struct trapframe *tf) {
break; break;
} }
ticks ++; ticks ++;
// if (ticks % TICK_NUM == 0) {
// print_ticks();
// }
break; break;
case IRQ_OFFSET + IRQ_COM1: case IRQ_OFFSET + IRQ_COM1:
c = cons_getc(); c = cons_getc();