我正在尝试编写简单的操作系统,以更好地了解操作系统的工作方式,我的屏幕库有问题,我有清除屏幕的功能:
#define VGA_ADDRESS 0xb8000
#define MAX_ROWS 25
#define MAX_COLS 80
#define SUPREMACY_TTY_COLOR 0x0f
#define RED_ON_WHITE 0xf4
/* Screen i/o ports */
#define REG_SCREEN_CTRL 0x3d4
#define REG_SCREEN_DATA 0x3d5
void clear_screen() {
int screen_size = MAX_COLS * MAX_ROWS;
int i;
char* vga_mem = (char*)VGA_ADDRESS;
for (i = 0; i < screen_size; i++) {
vga_mem[i*2] = ' ';
vga_mem[i*2+1] = TTY_COLOR;
}
set_cursor_offset(get_offset(0, 0));
}
int get_offset(int col, int row) { return 2 * (row * MAX_COLS + col); }
但是os将进入bootloop,当我在内核中运行该函数时,我已经开始使用gdb进行调试,并且显示该函数的名称为:
get_offset(0,0);
但是在函数中有奇怪的值:
get_offset (col=-268370093, row=-268377405) at kernel/drivers/screen.c:103
有人知道哪里出问题了吗?
@edit,我已经添加了定义,我唯一要做的就是从内核main()调用clear_screen()