传递给函数的值已更改

时间:2019-07-07 10:41:22

标签: c gcc operating-system vga

我正在尝试编写简单的操作系统,以更好地了解操作系统的工作方式,我的屏幕库有问题,我有清除屏幕的功能:

#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()

0 个答案:

没有答案